gpt4 book ai didi

c# - 通用接口(interface)列表

转载 作者:太空狗 更新时间:2023-10-29 21:31:22 26 4
gpt4 key购买 nike

如果我有一个带有几个实现类的通用接口(interface),例如:

public interface IDataElement<T>
{
int DataElement { get; set; }
T Value { get; set; }
}

public class IntegerDataElement : IDataElement<int>
{
public int DataElement { get; set; }
public int Value { get; set; }
}

public class StringDataElement : IDataElement<String>
{
public int DataElement { get; set; }
public String Value { get; set; }
}

是否可以传递不同类型的实现类的集合,而不必求助于作为对象传递。

似乎无法将返回值定义为

public IDataElement<T>[] GetData()

public IDataElement<object>[] GetData() 

有什么建议吗?

最佳答案

你当然可以声明:

public IDataElement<T>[] GetData<T>()

public IDataElement<object>[] GetData()
  • 尽管后者可能不是您想要的(您的界面即使在 C# 4 中也不会变体,因为它在输入和输出位置都使用 T;即使它是变体,您将无法将该方差用于值类型)。前者将要求调用者指定 <T> ,例如

    foo.GetData<string>();

你觉得合适吗?

没有办法表达“对象的集合,每个对象都为不同的 T 实现 IDataElement<T>”,除非您还给它一个非泛型基类,在该基类中您可以只使用 IList<IDataElement> .在这种情况下,非泛型 IDataElement可以有 DataElement属性(property),离开Value通用接口(interface)中的属性:

public interface IDataElement
{
int DataElement { get; set; }
}

public interface IDataElement<T> : IDataElement
{
T Value { get; set; }
}

这对您的特定情况有用吗?

不清楚您希望如何在不知道数据元素类型的情况下使用数据元素集合...如果以上内容对您没有帮助,也许您可​​以详细说明您希望对这些集合执行的操作。

关于c# - 通用接口(interface)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com