Общая проблема интерфейса - PullRequest
2 голосов
/ 17 мая 2011

Итак, вот моя проблема:

У меня есть интерфейс:

public interface ICell<Feature> 
where Feature: struct, IComparable<ICell<Feature>>
{
    List<ICell<Feature>> Window { get; set; }
    Feature              GenusFeature { get; set; }
    Double               VitalityRatio { get; set; }
    String               PopulationMarker { get; set; }
    Boolean              Captured { get; set; }
}

И хотел реализовать интерфейс ISubstratum таким образом:

public interface ISubstratum<K,T> : IDisposable 
where K : IDisposable
where T : struct
{
    ICell<T> this[Int32 i, Int32 j] { get; set; }
}

Но компилятор говорит, что:

The type 'T' cannot be used as type parameter 'Feature' in the generic type or method 'Colorizer.Core.ICell<Feature>'. There is no boxing conversion or type parameter conversion from 'T' to 'System.IComparable<Colorizer.Core.ICell<T>>'.

В некоторой возможной реализации ISubstratum я планировал передать Bitmap как K && ICell (расширенная информация о пикселях) как T.

Как решить эту проблему?

Спасибо!

Ответы [ 5 ]

6 голосов
/ 17 мая 2011

В основном у вас должно быть дополнительное ограничение на T:

where T : struct, IComparable<ICell<T>>

тогда должно работать нормально. Это необходимо для удовлетворения того же ограничения на Feature в ICell<Feature>.

Я бы также предложил переименовать параметр типа Feature в TFeature, чтобы сделать его более очевидным параметром типа.

1 голос
/ 17 мая 2011
public interface ISubstratum<K,T> : IDisposable 
where K : IDisposable
where T : struct, IComparable<ICell<Feature>>
{
    ICell<T> this[Int32 i, Int32 j] { get; set; }
}
1 голос
/ 17 мая 2011

Это потому, что ваш T в ISubstratum<K,T> ограничен только структурой, тогда как T в ICell<T> также должен быть IComparable<ICell<T>>? Если вы добавите это дополнение, где это работает?

public interface ISubstratum<K,T> : IDisposable 
where K : IDisposable
where T : struct, IComparable<ICell<T>>
{
    ICell<T> this[Int32 i, Int32 j] { get; set; }
}

1 голос
/ 17 мая 2011

Требуется, чтобы T реализовал IComparable<ICell<T>> в соответствии с определением типа ICell.

1 голос
/ 17 мая 2011

Поскольку ваше ограничение на параметр общего типа T вашего интерфейса ISubstratum недостаточно конкретное.Должно быть:

where T : struct, IComparable<ICell<Feature>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...