Больше объектов с разными типами в одном списке - PullRequest
3 голосов
/ 12 декабря 2011

Можно ли добавить несколько объектов разных типов в один и тот же список и как мне это сделать?

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

Ответы [ 3 ]

11 голосов
/ 12 декабря 2011

Конечно - просто создайте список, используя базовый тип в качестве аргумента универсального типа:

List<Control> controls = new List<Control>();
controls.Add(new TextBox());
controls.Add(new Label());
controls.Add(new Button());
// etc

Обратите внимание, что при повторном получении элементов вы будете «знать» только о них как о базовом типехотя, так что вам нужно будет привести, если вы хотите выполнить какие-либо специфичные для подтипа операции.Например:

// Assuming you know that there's at least one entry...
Control firstControl = controls[0];
TextBox tb = firstControl as TextBox;
if (tb != null)
{
    // Use tb here
}

Если вы хотите получить все элементы определенного типа (или их подтипа), вы можете использовать метод OfType<>:

foreach (TextBox tb in controls.OfType<TextBox>())
{
    // Use tb here
}
1 голос
/ 12 декабря 2011

Если у вас есть что-то вроде этого:

public class Base { }

public class DerivedA : Base { }
public class DerivedB : Base { }
public class DerivedC : Base { }

Вы можете:

List<Base> list = new List<Base>();
list.Add(new DerivedA);
list.Add(new DerivedB);

и т. Д. *

0 голосов
/ 12 декабря 2011

Вы можете, если вы объявите контейнер как список, содержащий указатели на объекты, таким образом, вы можете без проблем опуститься и все еще иметь полиморфизм.

Объявите список как указатель на ваш базовый класс.

...