如何在 csharp 中使用泛型类型继承
本文关键字:泛型类型 继承 csharp | 更新日期: 2023-09-27 18:31:01
我有这个示例总结通用代码:
public class Box<E> where E : BoxProperties{
}
public class BoxProperties{
}
public class BlueBox : Box<BlueBox.BlueProperties >{
public class BlueProperties : Properties{
}
}
public class RedBox : Box<RedBox.RedProperties >{
public class RedProperties : Properties{
}
}
我需要创建一个可以将RedBox和BlueBox存储为值的字典。请帮忙吗?
对于您所描述的类型,BlueBox
和 RedBox
之间最接近的共同祖先类型是 System.Object
。 你将不得不使用Dictionary<TKey, object>
,或引入一些其他共同的祖先类型。
你可以
做这样的事情——
public class BoxProperties
{
}
interface IBox
{
}
public class Box<E> : IBox where E : BoxProperties
{
}
public class BlueBox : Box<BlueBox.BlueProperties>
{
public class BlueProperties : BoxProperties
{
}
}
public class Properties
{
}
public class RedBox : Box<RedBox.RedProperties>
{
public class RedProperties : BoxProperties
{
}
}
有了这个,您将能够做到 -
var dictionary = new Dictionary<string, IBox>();
dictionary.Add("a", new BlueBox());
dictionary.Add("b", new RedBox());
我认为这取决于什么是类Box<E>
interface IBox<out E> where E : BoxProperties
{
}
public class Box<E> : IBox<E> where E : BoxProperties
{
}
public class BoxProperties
{
}
public class BlueBox : Box<BlueBox.BlueProperties>
{
public class BlueProperties : BoxProperties
{
}
}
public class RedBox : Box<RedBox.RedProperties>
{
public class RedProperties : BoxProperties
{
}
}
有了这个,你可以声明一个字典,比如:
var dic = new Dictionary<string, IBox<BoxProperties>>();
dic.Add("red", new RedBox());
dic.Add("blue", new BlueBox());
但是out
不可能最适合你,看看这个