Доступ к свойствам наследующего класса - PullRequest
0 голосов
/ 11 октября 2018

У меня есть следующий класс:

class Object
{
   ...
   Method();
}

И ряд классов, которые его наследуют:

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

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

У меня есть список, в который помещаются все объекты:

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

Я хочу иметь возможность просматривать список, и для каждого члена я хочу иметь возможность вызывать MethodX () в классе вариантов, а не унаследованном Method ().

Я нашел единственный способ сделать это следующим образом:

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 голосов
/ 11 октября 2018

Вы можете изменить 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 ключевых слов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...