【发布时间】:2012-06-03 23:55:56
【问题描述】:
C# Accessing a subclass property 的重复 - 在那里查看其他解决方案。
我有一个对象模型,其中每个对象都有一个父对象,我想使用每个对象的特定类型访问父属性。所以例如Wheel 应该有一个 Car 类型的父属性。我的猜测是有一个既定的设计模式来实现这一点(在.NET中)。但是,我没有找到它,所以我想出的设计看起来像这样
public class BaseObject<T> where T : BaseObject<T>
{
private T mParent;
protected T Parent
{
get { return mParent; }
}
public BaseObject(T parent)
{
mParent = parent;
}
public void Save() ...
public void Delete() ...
public BaseObject<T> Clone() ...
}
public class Car : BaseObject<Car>
{
public Car(Car parent) : base(parent)
{
}
public bool Is4WD()
{
return true;
}
}
public class Wheel : BaseObject<Car>
{
public Wheel(Car parent) : base(parent)
{
}
public float RequiredTirePressure()
{
return Parent.Is4WD() ? 3.0f : 2.5f;
}
}
您是否发现这种方法存在任何设计或性能缺陷?你能推荐一个更好的设计吗?
【问题讨论】:
-
您要解决什么问题?与泛型混在一起并不是一个好主意。
-
我的数据由一个对象树组成,其中一个主对象可能有子对象,而子对象又可能有自己的子对象等。为此,每个对象都有对其父对象的引用,它可以在其中注册/注销.在许多情况下,子对象访问其父对象的方法/属性。一种方法是将父属性从基类型转换为正确的类型,但我想知道是否有一种方法可以进行类型安全声明。
-
Liskovs 替换原则说,任何采用基类的方法都应该适用于所有不同的子类。您要问的是违反了该原则,因此不是真正的
is-a关系。如果你能用真实的类名而不是你现在添加的抽象名来说明你的问题会更好。 -
我试图通过使用特定的类名来使示例更有意义(对不起,我不能在这里使用实名)。这是否表明我在寻找什么?
-
没有。我没有得到“BaseObject”的用法。有什么意义?
标签: .net oop design-patterns inheritance subclass