如何在C#中没有强制转换的情况下访问多态方法

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个引用变量的情况下实现这一目标?

谢谢

Jul*_*iet 5

为了保证您的代码类型安全,您可以制作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)