[英]C# - list of subclass Types
我想要一个类类型列表(不是类实例列表),其中List的每个成员都是MyClass的子类。
例如,我可以这样做:
List<System.Type> myList;
myList.Add(typeof(mySubClass));
但我想限制列表只接受MyClass的子类。
这与此类问题截然不同。 理想情况下,我想避免linq,因为它在我的项目中目前尚未使用。
Servy在他的评论中是正确的 , Lee 在他的评论 中 : 组合比继承更为可取 。 所以这是一个很好的选择:
public class ListOfTypes<T>
{
private List<Type> _types = new List<Type>();
public void Add<U>() where U : T
{
_types.Add(typeof(U));
}
}
用法:
var x = new ListOfTypes<SuperClass>();
x.Add<MySubClass>()
请注意,如果要为其他代码提供对包含的Type
的读访问权,而不需要依赖此类的其他代码,则可以使此类实现类似IReadOnlyList<Type>
的接口。
但是如果你想继承,你可以创建自己继承自List
的类,然后添加你自己的通用Add
方法,如下所示:
public class ListOfTypes<T> : List<Type>
{
public void Add<U>() where U : T
{
Add(typeof(U));
}
}
只要知道Lee说的话 :用第二个版本你仍然可以Add(typeof(Foo))
。
您应该从List派生一个列表类,并覆盖Add方法以执行您需要的类型检查。 我不知道在.NET中自动执行此操作的方法。
像这样的东西可以工作:
public class SubTypeList : List<System.Type>
{
public System.Type BaseType { get; set; }
public SubTypeList()
: this(typeof(System.Object))
{
}
public SubTypeList(System.Type baseType)
{
BaseType = BaseType;
}
public new void Add(System.Type item)
{
if (item.IsSubclassOf(BaseType) == true)
{
base.Add(item);
}
else
{
// handle error condition where it's not a subtype... perhaps throw an exception if
}
}
}
您需要更新向列表添加/更新项的其他方法(索引setter,AddRange,Insert等)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.