我再次希望这不是一个意见问题; 我试图知道哪种是确定属于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;
}
}
Run Code Online (Sandbox Code Playgroud)
2 - 使用is运算符
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);
}
Run Code Online (Sandbox Code Playgroud)
每种选择的含义是什么?我认为2由于依赖于元数据而具有更大的性能,但是1似乎不那么优雅.此外,我学会了用C++编写的这种方法......我不确定是否有必要用C#这样做.
编辑1:
我已将override关键字添加到上面的代码中.
编辑2:
对不起,我可能没说清楚.我会更好地说明一下:
例如,我有一个WPF Panel对象,它有一个Children属性,返回给我UIElement.我需要知道某个元素在什么类型上行动...在我的特定情况下,用户在屏幕上绘制图形,所以我需要知道有多少节点和多少个连接被绘制以便存储然后在数据库.不幸的是,我不能使用多态性,对吗?我怎么知道是否应该在我的节点表或连接表中添加一行?
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |