Можно, конечно, заявить:
public IDataElement<T>[] GetData<T>()
и
public IDataElement<object>[] GetData()
хотя последнее, вероятно, не то, что вам нужно (ваш интерфейс не будет вариантным даже в C # 4, так как он использует T
как во входном, так и в выходном положении; даже если бы он был вариантным Вы не сможете использовать эту дисперсию для типов значений). В первом случае от абонента требуется указать <T>
, например,
foo.GetData<string>();
Это нормально для тебя?
Нет способа выразить «набор объектов, каждый из которых реализует IDataElement<T>
для другого T», если только вы не передадите ему неуниверсальный базовый класс, в котором вы можете просто использовать IList<IDataElement>
. В этом случае неуниверсальный IDataElement
может иметь свойство DataElement
, оставляя свойство Value
в универсальном интерфейсе:
public interface IDataElement
{
int DataElement { get; set; }
}
public interface IDataElement<T> : IDataElement
{
T Value { get; set; }
}
Это полезно в вашей конкретной ситуации?
Непонятно, как бы вы хотели использовать коллекцию элементов данных, не зная их типов ... если вышеизложенное не поможет вам, возможно, вы могли бы рассказать больше о том, что вы ожидаете сделать с коллекциями.