jay*_*bny 1 c# design-patterns object derived-class
class AlphaBase
{
public bool PropA { get; set; }
}
class AlphaA : AlphaBase
{
public bool PropB { get; set; }
}
class BetaBase
{
protected AlphaBase MAlpha;
public BetaBase(AlphaBase rAlpha)
{
MAlpha = rAlpha;
}
}
class BetaA : BetaBase
{
public BetaA(AlphaA rAlpha) : base(rAlpha) {}
void DoSomething()
{
if (MAlpha.PropA) ;
if (MAlpha.ProbB) ; //wont compile
}
}
Run Code Online (Sandbox Code Playgroud)
问题:如何在不为AlphA创建第二个变量的情况下使其工作.
BetaBase将使用MAlpha,BetaB也是如此..如何在没有强制转换且没有2个引用变量的情况下实现这一目标?
谢谢
为了保证您的代码类型安全,您可以制作BetaBase通用代码:
class BetaBase<TAlphaBase>
where TAlphaBase : AlphaBase
{
protected TAlphaBase MAlpha;
public BetaBase(TAlphaBase rAlpha)
{
MAlpha = rAlpha;
}
}
class BetaA : BetaBase<AlphaA>
{
public BetaA(AlphaA rAlpha) : base(rAlpha) {}
void DoSomething()
{
if (MAlpha.PropA) ;
if (MAlpha.PropB) ; //yay! compiles now
}
}
Run Code Online (Sandbox Code Playgroud)