我正在設計一個應該返回實例列表的方法,每個實例實際上是不同的數據類型。具有公共基類的不同類型的返回列表
以下是我的設計稿,我需要一個建議,因爲它
public class abstract Base
{
//DataType is an enum
public abstract DataType Type { get; set; }
public abstract BaseType Value { get; set; }
}
public abstract class BaseType
{
}
public class MyString:BaseType
{
}
public class MyInt:BaseType
{
}
//string for example
public class Type1:Base
{
public override DataType Type
{
get { return DataType.Type1; }
set;
}
public override BaseType Value
{
get { return new MyString("a"); }
set;
}
}
public class Type2:Base
{
public override DataType Type
{
get { return DataType.Type2; }
set;
}
public override BaseType Value
{
//MyInt for example
get { return new MyInt(10); }
set;
}
}
方法應該是
List<Base> GetValues();
來電有望寫類似的東西
List<Base> values = GetValues();
foreach(var value in values)
{
switch(value.Type)
{
case DataType.MyString:
MyString str = value.Value as MyString;
break;
case DataType.MyInt:
MyInt str = value.Value as MyInt;
break;
}
}
我問題是什麼是最好的設計?我可以更好地使用泛型,如何?
我看不出這一切會永遠工作......你可以給你所要完成什麼一些細節? – Yaur
除非您願意使用'interface IBase',並且如果您希望它包含混合實例,請將列表設置爲'List >',否則您無法真正做到這一點。當然接口只能爲'Value'指定一個getter。 –
millimoose
我不想使用對象,有沒有更好的方法,我可以在新的抽象類中使用泛型方法並覆蓋它嗎? –