再次,我真的希望這不是一個意見問題;我想知道哪個是確定屬於C#中某個層次結構的對象類型的最佳方法。我有兩種方法來設計我的應用程序:確定一個物體的類型
1 - 基類使用性質:
public abstract class Parent
{
public abstract TypeOfObject TypeOfObject { get; }
}
public class Child1 : Parent
{
public override TypeOfObject TypeOfObject { get { return TypeOfObject.Child1 } }
// ...
}
public class Child2 : Parent
{
public override TypeOfObject TypeOfObject { get { return TypeOfObject.Child2 } }
// ...
}
public enum TypeOfObject
{
Child1,
Child2
}
public static void Main()
{
Parent p = new Child1();
switch (p.TypeOfObject)
{
case TypeOfObject.Child1: _doSomethingWithChild1(p);break;
case TypeOfObject.Child2: _doSomethingWithChild2(p);break;
}
}
2 - 使用是運營商
public abstract class Parent
{
// ...
}
public class Child1
{
// ...
}
public class Child2 : Parent
{
// ...
}
public enum TypeOfObject
{
Child1,
Child2
}
public static void Main()
{
Parent p = new Child1();
if (p is Child1) _doSomethingWithChild1(p);
if (p is Child2) _doSomethingWithChild2(p);
}
什麼每個選擇的含義?我認爲2由於依賴元數據而具有更高的性能,但1似乎不太優雅。此外,我學會了在C++中這樣做的一種方式......我不確定有必要使用C#來完成這項工作。
EDIT 1:
我已經添加了倍率關鍵字上面的代碼。
編輯2:
對不起,我可能沒有說清楚。我會更好地說明它:
例如,我有具有Children
屬性,它返回我UIElement
個WPF Panel
對象。我需要知道某個元素的類型是什麼類型的......在我的特殊情況下,用戶正在屏幕上繪製圖形,所以我需要知道爲了存儲需要繪製多少個節點和多少個連接然後在數據庫。不幸的是,我不能使用多態性,對吧?我如何知道是否應該將一行添加到我的節點表或我的連接表中?
這是一個常見的面向對象設計的錯誤。你不需要這個。請閱讀「多態性」,然後關閉問題。 – 2010-10-14 19:51:45
有很多.NET Framework中,例如,XmlDocument的/的XmlElement/...,的XDocument /的XElement/...,LambdaExpression/UnaryExpression/... – dtb 2010-10-14 20:02:11
@美國洛特第一種方式的例子很多:+1 :) (blah) – leppie 2010-10-15 13:37:11