我想创建一个可以容纳许多相同类型的类的类.例如,让我说我有一个基类,如下所示:
public class BaseClass
{
public string MyBaseString
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一些像这样的派生类:
public class DerivedClass : BaseClass
{
public MyDerivedClassString
{
get;
set;
}
}
public class DerivedClass2 : BaseClass
{
public MyDerivedClass2String
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想要一个接受其中一个实现的类,并用它做一些事情.这是我唯一能想到的,但必须有一个更好的方法:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
澄清:我想要实现的具体目标是使用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
}
}
Run Code Online (Sandbox Code Playgroud)
然后我会有一个类似的传奇类
public class Legend
{
public object ColorScheme
{ get; set; }
public Guid LegendId
{ get; set; }
public Legend(object colorScheme)
{
ColorScheme = colorScheme;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我可能有一个位于图例顶部的表单,该表单根据颜色方案的类型显示各种颜色方案的属性.希望这有助于澄清一点.
public class ClassA<T> where T : BaseClass
{
public T MyClass { get; set; }
public ClassA(T myClass) { MyClass = myClass; }
}
Run Code Online (Sandbox Code Playgroud)
除此之外,将类层次结构的公共接口定义为接口或基类中的方法(具体,抽象或虚拟).然后你可以放心,所有派生类都有这样的方法/属性,并且可以在你的通用包装器中使用它们.
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |