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中的某些东西就知道对象的类型。为什么要通过一个猜谜游戏来检查每种可能性呢?为什么不要求它下钻到适当的子类并执行适当的方法呢?有办法实现这个目标吗?
您必须在sub
类中重写super
类属性以获得所需的行为。
相应地改变你的类定义:
public class super
{
public virtual Boolean isSuper()
{
return true;
}
}
public class sub : super
{
public override Boolean isSuper()
{
return false;
}
}