如何在 C# 中访问多态方法而不进行强制转换
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 个引用变量的情况下实现这一目标?
谢谢
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
}
}
Question: how do make this work, without creating a second variable for AlphA..
BetaBase will be using MAlpha and so will BetaB.. how do I achieve this without a cast and without 2 reference variables?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
MAlpha
的类型为AlphaBase
,它没有布尔属性PropB
。您只能通过强制转换来执行此操作。MAlpha
is of typeAlphaBase
, which does not have a boolean propertyPropB
. You can only do this via cast.为了保证代码类型的安全,您可以将
BetaBase
设为通用,如下所示:To keep your code type safe, you can make
BetaBase
generic as such:如果不强制转换到该对象,则无法访问该对象的属性。如果您只是想知道它是否是
AlphaA
的实例,请使用表达式... is AlphaA
。It's not possible to access properties of an object without a cast to that object. If you're just wanting to know if it's an instance of
AlphaA
, use the expression... is AlphaA
.