gpt4 book ai didi

c# - 声明一个类引用列表

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:41 51 4
gpt4 key购买 nike

我需要声明一个类引用列表。具体来说,是实现一个接口(interface)的类列表,我在这里将其称为 IInterface

类似于 List 可以是类型列表的方式,看起来像这样:

List<Type> types = new List<Type> {string, bool, int, float};

我需要完成同样的事情,其中​​每一个都是我自己的类并实现接口(interface) IInterface 所以:

List<(idk)> references = new List<(idk)> {myClass, myClass2, myClass3};

它们都是MyClass : IInterface, MyClass2 : IInterface and MyClass3 : IInterface

我需要这个,这样当我创建类型的实例时,编译器就会知道该类型实现了IInterface

最佳答案

如果你基本上想要一个 List<Type> Type在哪里s 是实现接口(interface)所必需的,并且您希望在编译时强制执行此操作,这实际上可以通过包装 List<Type> 来实现。并使 add 方法具有受约束的通用类型参数并使用它来添加到列表中,但使用起来可能有点笨拙(您将无法使用您在问题中提到的漂亮的集合初始化语法) :

public class TypeList<T> : IEnumerable<Type>
{
private List<Type> _list = new List<Type>();

public void Add<TAdd>() where TAdd : T
{
_list.Add(typeof(TAdd));
}

public IEnumerator<Type> GetEnumerator() => _list.GetEnumerator();

IEnumerator IEnumerable.GetEnumerator() => _list.GetEnumerator();
}

此类的通用类型参数是您希望列表约束的类型,因此在您的示例中,使用列表如下所示:

var list = new TypeList<IInterface>();
list.Add<MyClass>();
list.Add<MyClass2>();
list.Add<MyClass3>();

这些将无法编译:

list.Add<string>();
list.Add<bool>();
list.Add<int>();
list.Add<float>();

关于c# - 声明一个类引用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557633/

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