【发布时间】:2014-05-15 08:23:06
【问题描述】:
我想通过其他类实现一些目标,但我将提供一个与我的类似的示例。假设我们有以下类和枚举 Gender:
public enum Gender
{
Male = 1,
Female = 2
}
public abstract class Human
{
public string Name { get; set; }
}
public class Woman : Human
{
public bool Intuition { get; set; }
}
public class Man : Human
{
public bool Logic { get; set; }
}
假设我想要一个使用访问者数组(人类)的会议类,这些访问者可以是男人或女人对象。该数组将包含两个类之一的对象,具体取决于提供的 Gender 枚举的值。所以,我可以这样做:
public class Meeting
{
private Human[] visitors;
public Human[] Visitors { get { return visitors; } set { visitors = value; } }
public Meeting(Gender gender, int number)
{
if (gender == Gender.Male)
{
// If the gender is Male, create a new array of Man objects.
visitors = new Man[number];
}
else
{
// Otherwise, create a new array of Woman objects.
visitors = new Woman[number];
}
for (int i = 0; i < number; i++)
{
if (gender == Gender.Male)
{
// If the gender is Male, create a new Man object.
visitors[i] = new Man();
}
else
{
// Otherwise, create a new Woman object.
visitors[i] = new Woman();
}
}
}
}
代码在语法上是正确的,但我认为它写得不好。假设我不仅有 Woman 和 Man 课程,而且还有 10 个以上的课程。此外,假设我没有两行代码,而是一千行代码,我应该在其中创建一个新的类实例,具体取决于某些条件(在我的例子中是 Gender 枚举的值)。
有没有更好的方法来实现这一点?例如,在方法开头分配的某种类/变量,取决于一个值(枚举),然后在其他任何地方使用。
在这种情况下我应该使用泛型吗?
【问题讨论】:
标签: c# class object dynamic types