gpt4 book ai didi

c# - 在继承类型中访问新版本的属性/方法

转载 作者:太空宇宙 更新时间:2023-11-03 15:20:45 25 4
gpt4 key购买 nike

我有两个类(class)。 A类消费B类。我希望能够存储任何 ClassB 对象的列表(即 ClassB、ClassB 都在同一个列表中)。

我已经这样实现了(简化):

ClassB
{
public object Thing {get; set;}
AssignThing(object thing) {Thing = thing;}
}

ClassB<T> : ClassB
{
...
}

ClassA
{
public List<ClassB> list {get; set;}
...
}

但是,我希望 ClassB 能够根据 T 是什么,将 Thing 存储为其 native 类型 T,同时仍然能够从列表中访问 ClassA 的 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>的,和 AssignThing还使用 ClassB的版本。显然,我不能覆盖(而不是新的),因为它们是不同的签名。

看来我对继承/多态性有点模糊。我尝试在 C# 中做的事情是可能的吗?

最佳答案

您需要制作 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
}
}

另一种选择是将它们命名为不同的。如果您不需要它们具有相同的名称,只需将 ClassB 称为 GenClassB 即可

关于c# - 在继承类型中访问新版本的属性/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37476356/

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