访问继承类的属性

时间:2018-10-11 08:56:20

标签: c# list inheritance

我的课程如下:

class Object
{
   ...
   Method();
}

以及许多继承它的类:

class ObjectVariant1 : Object
{
   ...
   Method1();
}

class ObjectVariant2 : Object
{
   ...
   Method2();
}

我有一个列出所有对象的列表:

List<Object> objectList = new List<Object>();

我希望能够遍历该列表,并且对于每个成员,我希望能够在变体类而不是继承的Method()中调用MethodX()。

我发现做到这一点的唯一方法如下:

foreach (var obj in objectList)
{
   if (obj is ObjectVariant1)
   {
      ObjectVariant1 newObj = (ObjectVariant1)obj;
      newObj.Method();
   }

   if (obj is ObjectVariant2)
   {
      ObjectVariant2 newObj = (ObjectVariant2)obj;
      newObj.Method();
   }
}

但是,我希望能够轻松添加新的ObjectVariant类,而不必添加此类额外的检查。有没有一种方法可以自动执行foreach循环而无需为我创建的每个类添加新的检查?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将Object更改为接口IObject并使用它:

public interface IObject
{
   void Method();
}

class ObjectVariant1 : IObject
{
   public void Method() 
   {

   }
}

class ObjectVariant2 : IObject
{
   public void Method() 
   {

   }
}

然后您可以使用List<IObject> objectList并致电obj.Method() 另一种方法(在C#中使用多态)是使用virtual-override关键字