我想创建一个类,该类可以容纳任意数量的相同类型的类。比如让说,我有一个基类像如下:如何接受通用类并使用其属性/方法
public class BaseClass
{
public string MyBaseString
{
get;
set;
}
}
然后,我有几个派生类是这样的:
public class DerivedClass : BaseClass
{
public MyDerivedClassString
{
get;
set;
}
}
public class DerivedClass2 : BaseClass
{
public MyDerivedClass2String
{
get;
set;
}
}
现在我想接受这些实现的一个类用它做东西。这是我能想到的唯一的事情,但必须有一个更好的办法:
public class ClassA
{
public object MyClass
{
get;
set;
}
public ClassA (object myClass)
{
MyClass = myClass;
if (object is BaseClass)
{
//do something
}
else if (object is DerivedClass)
{
//do something specific to derived class
}
else if (object is DerivedClass2)
{
//do something specific to derived class 2
}
}
}
澄清:我想实现的具体目标是使用ClassA的作为的各种实现容器类BaseClass的。我试图完成的业务目标是创建一个Legend对象,它可以使用多种颜色方案(即Mono Color Ramp,Multi Color Ramp等)。因此,我希望Legend类包含正在使用的ColorScheme,但仍然可以访问该颜色方案的独特属性以供稍后修改。
澄清2基于各种各样的回答,我上了车,我想我提供什么,我试图做一个精确的复制:
public class BaseColorScheme
{
List<Color> _colors = new List<Color>();
public List<Color> Colors
{
get
{
return _colors;
}
set
{
_colors = value;
}
}
}
public class SingleColorScheme : BaseColorScheme
{
public Color MidColor
{
get;
set;
}
public SingleColorScheme(Color midColor, int numberOfClassifications)
{
Colors = CreateMonoColorRamp(midColor, numberOfClassifications);
}
}
public class MultiColorScheme : BaseColorScheme
{
public Color StartColor
{
get;
set;
}
public Color EndColor
{
get;
set;
}
public Color MidColor
{
get;
set;
}
public MultiColorScheme(Color startColor, Color endColor, Color midColor)
{
StartColor = startColor;
EndColor = endColor;
MidColor = midColor;
Colors = //do something to define multi color scheme
}
}
然后,我将有一个传说级这将是像
public class Legend
{
public object ColorScheme
{ get; set; }
public Guid LegendId
{ get; set; }
public Legend(object colorScheme)
{
ColorScheme = colorScheme;
}
}
最后我可能有上显示的各种配色方案的基础上哪种类型的配色方案,它的性质传说上面的一个形式。希望这有助于澄清一点。
如果您不确定,我们应该如何确定? – SwDevMan81 2010-06-09 20:54:31
这就是为什么我问这个问题。我对我的所有选项都不熟悉,所以我想我会询问可能知道最佳实践的用户社区。 – 2010-06-09 20:56:04
是的澄清更有意义。我想很多其他答案都是批评你的设计,而不是理解你想要的。 – SwDevMan81 2010-06-09 21:16:21