我有以下类:
class GridBase
{
public object DataSource { get; set; }
}
class GenericGrid<T> : GridBase
{
public new T DataSource { get; set; }
}
GridBase类和Generic Grid类都可以被实例化,也可以从任意一个类派生。
这种层次结构的实现方式是否被认为是正确/可接受的呢? 或者你应该再加把劲,像下面这样实现
class GridBase
{
protected object dataSource;
public object DataSource { get { return dataSource; } set { dataSource = value; } }
}
class GenericGrid<T> : GridBase
{
public new T DataSource { get { return (T)dataSource; } set { dataSource = value; } }
}
当一个属性在派生类中重新引入时,非泛型类也适用于相同的情况。这里只是举了一个泛型的例子。
另外还有一个情况和问题。
abstract class SomeBase
{
protected abstract void DoSomething();
}
class Child : SomeBase
{
protected override void DoSomething()
{
/* Some implementation here */
}
}
这里的情况是框架“X”声明SomeBase,使您可以定义自己的子类。然后他们创建的类(在运行时)从您的类(这种情况下是Child)继承。然而,在他们实现DoSomething()时,他们并没有调用您的DoSomething()方法。
对于他们来说,他们也不能盲目地调用base.DoSomething(),因为通常情况下,他们生成的类通常会从SomeBase继承,因此该方法是抽象的,那样就无效了。(个人而言,我不喜欢C#中的这种行为)。
但无论如何,在“意图”似乎相互矛盾的情况下,不调用base.xxx()好还是被接受的?
编辑 从框架设计的角度来看。它这样做是好的/可接受的吗?如果不是,那么如何设计才能防止这种情况或更好地传达他们的意图(在两种情况下)?