我有两节课。 ClassA使用ClassB。我希望能够存储任何ClassB对象的List(即ClassB,ClassB都在同一个列表中)。
我已经实现了这样(简化):
ClassB
{
public object Thing {get; set;}
AssignThing(object thing) {Thing = thing;}
}
ClassB<T> : ClassB
{
...
}
ClassA
{
public List<ClassB> list {get; set;}
...
}
但是,我希望ClassB能够将Thing作为其原生类型T存储,基于T是什么,同时仍然能够从列表中访问Class A中的T Thing和T AssignThing,而无需将其转换为各自的ClassB。我最初为ClassB尝试了以下实现:
ClassB<T> : ClassB
{
public new T Thing {get; set;}
AssignThing(T thing) {Thing = thing;}
}
然而,当我从ClassA访问Thing时,它会(通过快速监视)显示ClassB
的Thing版本,而不是ClassB<T>
和{{1} }也使用AssignThing
的版本。显然,我不能覆盖(而不是新)因为它们是不同的签名。
似乎我对继承/多态性有点模糊。我正在尝试用C#做什么?
答案 0 :(得分:0)
您需要制作ClassB列表,而不仅仅是ClassB。
class ClassB
{
private object Thing {get; set;}
public void AssignThing(object thing) {Thing = thing;}
}
class ClassB<T>:ClassB
{
private T Thing { get; set; }
public void AssignThing(T thing) { Thing = thing; }
}
class ClassA
{
public List<ClassB<String>> list = new List<ClassB<String>>();
public ClassA()
{
list.Add(new ClassB<String>());
//Here you only can add ClassB<String>, not ClassB
}
}
另一种选择是将它们命名为diferend。如果您不需要它们具有相同的名称,只需调用类似GenClassB的ClassB