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/

10-11 15:20