gpt4 book ai didi

c# - 只接受声明了一些接口(interface)的类型

转载 作者:行者123 更新时间:2023-11-30 14:52:00 25 4
gpt4 key购买 nike

如何做这样的事情

List<Type:IMyInterface> a = new List<Type:IMyInterface>;
a.Add(typeof(MyClass1)); //MyClass1..3 implementing IMyInterface
a.Add(typeof(MyClass2));
a.Add(typeof(MyClass3));
IMyInterface c = default(a[1]); //create MyClass2 object
a.Add(typeof(Object)); //must fail

没有先构造对象或稍后检查类型?

最佳答案

C# 不直接支持您想要的内容。因为类型参数的约束只能在构造函数、继承层次结构、接口(interface)实现和其他一些方面指定。 more details

你可以用不同的方式做到这一点,但是在这种方法中没有编译时错误:

公共(public)接口(interface) IMyConstraint { 空做();

public class MyClass: IMyConstraint
{
public void Do()
{
}
}

// Inherit from the List class to add some functionality to it
public class MyTypeList<T> : List<T> where T : System.Type
{
public MyTypeList()
{

}

// use new keyword to prevent client from using the List.Add method.
public new void Add(T type)
{
// here you check if the type is implementing the interface or not
if (!typeof(IMyConstraint).IsAssignableFrom(type))
{
// if it dose not implement the interface just throw an exception
throw new InvalidOperationException();
}
// call the original List.Add method
base.Add(type);
}
}

关于c# - 只接受声明了一些接口(interface)的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32933769/

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