假设我们有这个示例层次结构:
abstract class Shape { }
class Circle : Shape
{
public int Radius { get; set; }
}
class Rectangle : Shape
{
public int A { get; set; }
public int B { get; set; }
}
我想知道是否可以在 C# 中对类型为
Shape
的变量使用模式匹配来确定它是否具有属性 Radius,例如
// Imaginary syntax
if (myShape is { int Radius} )
{
}
我还没有发现这是可能的,所以我认为答案是否定的,但可能有人更了解。
我能想到的替代方案:
C# 不是脚本语言。
这样不行。
它的工作方式要好得多。
对于示例中的特定类,您将使用以下内容:
if( myShape is Circle myCircleShape )
{
do something with myCircleShape.Radius
}
如果您有更多带有半径的形状,请使它们全部派生自仅具有半径的公共基类。
如果你的继承树变得非常复杂,以至于无法使用单一继承来表示,那么就开始引入接口。