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

本文关键字:访问 子类 方法 列表 通过 foreach | 更新日期: 2023-09-27 18:05:37

试图理解如何访问子类的方法时,列表类型为超类。这应该是基本的多态性,但是我有点困惑了。

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());

现在我试着让列表中的每个对象查询自己,看看它是超类还是子类

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

因此,由于每个对象都被强制转换为超类,因此它使用isSuper()的超类方法,并且它总是作为超类响应。

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

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

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

相应地改变你的类定义:

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