我想創建一個類,該類可以容納任意數量的相同類型的類。比如讓說,我有一個基類像如下:如何接受通用類並使用其屬性/方法
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