Не используйте перечисление для этого. Более разумным решением является массив типов:
private static Type[] dogs =
{
typeof(Terrier),
typeof(Poodle),
typeof(Pitbull),
}
Тогда вы все равно можете go над всеми ними:
foreach (Type type in dogs)
{
Object dog = Activator.CreateInstance(type);
}
Хотя, если только вы не используете .ToString()
на это, возможно, вы захотите дать этим классам общий интерфейс или суперкласс для наследования (как rfmodulator также сказал в своем ответе), чтобы вы могли фактически вызывать функции для результирующих объектов. Если все три наследуются от суперкласса Dog
, что позволяет им использовать общий метод Bark()
, вы можете по крайней мере сделать что-то вроде этого:
public abstract class Dog
{
String Bark();
}
public class Terrier : Dog
{
public override String Bark() { return "Woof!"; }
}
public class Poodle : Dog
{
public override String Bark() { return "Yap"; }
}
public class Pitbull : Dog
{
public override String Bark() { return "Whuff!"; }
}
... так что вы действительно сможете получить что-то полезное из ваших созданных объектов:
foreach (Type type in dogs)
{
Dog dog = (Dog)Activator.CreateInstance(type);
Console.WriteLine(dog.Bark());
}