gpt4 book ai didi

C#/通过foreach访问时访问列表中子类的方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:38 27 4
gpt4 key购买 nike

试图了解当列表被键入为父类(super class)时如何访问子类的方法。这应该是基本的多态性,但我感到困惑。

public class super
{
public Boolean isSuper()
{
return true;
}
}

public class sub : super
{
public Boolean isSuper()
{
return false;
}
}

现在我列出这些对象

List <super> myList = new List<super>();
myList.Add(new super());
myList.Add(new sub());

现在我尝试让列表中的每个对象查询自己,看看它是父类(super class)还是子类

foreach(super objInList in myList)
{
if(objInList.isSuper())
Debug.Print("Super");
else
Debug.Print("Sub");
}

所以发生的事情是,由于每个对象都被转换为父类(super class),它使用父类(super class)方法 isSuper() 并且它始终作为父类(super class)响应。

我想访问子类的 isSuper() 而不必在循环的每次迭代中都使用 instanceof。显然,如果您可以查询对象以查看它是 super 对象还是子对象,那么 O/S 中的某些东西就知道对象的类型。为什么要进行检查每种可能性的猜谜游戏?为什么不让它深入到适当的子类并执行适当的方法呢?有没有办法实现这个目标?

最佳答案

你必须 override super 类属性在您的 sub 类中以获得所需的行为。

相应地更改您的类定义:

public class super
{
public virtual Boolean isSuper()
{
return true;
}
}

public class sub : super
{
public override Boolean isSuper()
{
return false;
}
}

关于C#/通过foreach访问时访问列表中子类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928664/

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