所以說我有三個類:A,B和C.A是抽象的,B和C繼承自A.正在使用反射來查找代碼氣味的抽象屬性的類型?
我創建了A類的列表。在函數中,我需要知道我有的類的類型:A,B或C.我是否使用反射來獲取名稱?分配一個類型變量並檢查?還是我使用抽象從根本上錯誤?
public abstract class A
{
public string Type
{
get;
set;
}
}
public class B : A
{
public B()
{
this.Type = "B";
Console.WriteLine("I am of type B!");
}
}
public class C : A
{
public C()
{
this.Type = "C";
Console.WriteLine("I am of type C!");
}
}
List<A> listOfStuff = new List<A>();
void doSomething()
{
listOfStuff.Add(new A());
listOfStuff.Add(new B());
listOfStuff.Add(new C());
foreach (A item in listOfStuff)
{
doOperation(item);
}
}
void doOperation(A thing1)
{
//Is this bad practice?
if (thing1.GetType().Name == "B")
{
//Do code
}
//Or what about this?
if (thing1.Type == "B")
{
//Do code
}
}
這兩個'doOperation'中的檢查都會給你帶來麻煩,因爲處理的類型列表會增加。你想做什麼?爲什麼不使用相關類型可以實現的接口? – xxbbcc
看起來你只是在這裏尋找*虛擬方法*。 –
問題可能更適合http://programmers.stackexchange.com/ – Sam