Могу ли я вызывать функции и переменные из родительского класса объекта без явного приведения типа объекта? - PullRequest
0 голосов
/ 16 сентября 2018

Я хочу просмотреть список различных объектов, которые все происходят из подклассов одного и того же родительского класса, и я все равно хочу использовать только вещи из родительского класса.

public class Foo{ public int a=0; }
public class Bar : foo{  }
public class Gun : foo{  }
public class Shotgun : Gun{  }
public class Rifle : Gun{  }

тогда, что яхотелось бы сделать позже:

object[] Array ={new Bar(),new Shotgun(),new Rifle()};
int index=0;
foreach(SubclassOfFoo obj in (Array as SubclassOfFoo[]))
{
    (Array[index] as SubclassOfFoo).a++;
    Console.WriteLine(obj.a);

    index++;
}

Надеюсь, есть способ сделать это.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Я бы предложил объявить массив родительского типа:

Foo[] Array =new Foo{new Bar(),new Shotgun(),new Rifle()};

Таким образом, кастинг не требуется:

foreach(Foo obj in Array))
{
    obj.a++;
    Console.WriteLine(obj.a);
}

Поскольку все подклассы наследуются от Foo или от потомка Foo, этот массив может содержать всех дочерних элементов и внуков. Каждый подкласс будет иметь свойство a. Кастинг не требуется

0 голосов
/ 16 сентября 2018

Я бы создал коллекцию для базового класса Foo вместо object

List<Foo> array = new List<Foo>();
array.Add(new Bar());
array.Add(new Shotgun());
array.Add(new Rifle());

, тогда вы можете использовать коллекцию напрямую, без приведения.

foreach(Foo obj in array)
{
    Console.WriteLine(obj.a);
    index++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...