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
}
}
问题:如何做到这一点,而又不为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
}
}
关于c# - 如何在不使用C#进行强制转换的情况下访问多态方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6104508/