在我正在维护的项目中,我们有一个核心基类,它具有一种上下文对象的属性:
public abstract class Base
{
public BaseContext Context { get; protected set; }
}
通常如果派生Base
,也需要派生BaseContext
,并且通常需要派生类中更具体的上下文。因此我认为以下内容可能非常好:
public class Derived : Base
{
public new DerivedContext Context
{
get { return (DerivedContext) base.Context; }
protected set { base.Context = value; }
}
}
从类型安全的角度来看,除了演员之外,这应该都很好,但是,不应该失败,因为类只能设置属性本身。使用这个会在代码中剪切一些强制转换,在少数情况下我会((DerivedContext) Context).Foo
,我实际上需要派生上下文的属性/方法。
是否有任何反对这种阴影的红旗?
(再考虑一下,可能还有另一种方法,使用泛型来实现同样的目标:
public abstract class Base<TContext> where TContext : BaseContext
{
public TContext Context { get; protected set; }
}
public class Derived : Base<DerivedContext> {}
并不需要隐藏基本成员。也许整体可能更清洁。)
答案 0 :(得分:4)
阴影通常是一个坏主意。而且这里看起来似乎没有必要 - 为什么不使用泛型类呢?
public abstract class Base<T>
{
public T Context { get; protected set; }
}
public class Derived : Base<DerivedContext>
{
...
}
没有投射,没有阴影,都是强类型的。