C# 为什么System.Windows.Shape.Path是密封的?

C# 为什么System.Windows.Shape.Path是密封的?,c#,.net,wpf,inheritance,extension-methods,C#,.net,Wpf,Inheritance,Extension Methods,我试图扩展shape类以包含一个附加变量,但发现该类是密封的。如何简单地使用替代实现方法来实现这一点 创建一个新类并存储一个形状,通过最简单的方法传递所有方法调用;不过,我相信还有更好的方法吗?如果要添加的变量是您只能从中读取的变量,并且是作为Path类的其他成员的结果计算的,则可以添加一个将返回您的值的扩展方法 但是,如果情况并非如此: 考虑创建一个类,该类继承自路径的父图形(未密封)。 然后将专用路径成员添加到此。您可以免费获取所有shape方法调用,只需为Path的唯一成员提供包装器。如果

我试图扩展shape类以包含一个附加变量,但发现该类是密封的。如何简单地使用替代实现方法来实现这一点


创建一个新类并存储一个形状,通过最简单的方法传递所有方法调用;不过,我相信还有更好的方法吗?

如果要添加的变量是您只能从中读取的变量,并且是作为Path类的其他成员的结果计算的,则可以添加一个将返回您的值的扩展方法

但是,如果情况并非如此:

考虑创建一个类,该类继承自路径的父图形(未密封)。
然后将专用路径成员添加到此。您可以免费获取所有shape方法调用,只需为Path的唯一成员提供包装器。

如果要添加的变量是您只能从中读取的变量,并且是作为Path类的其他成员的结果计算的,则可以添加一个将返回您的值的扩展方法

但是,如果情况并非如此:

考虑创建一个类,该类继承自路径的父图形(未密封)。
然后将专用路径成员添加到此。您可以免费获取所有shape方法调用,只需为Path的唯一成员提供包装。

WPF有一个强大的概念,名为Attached Properties。我不知道你想做什么,但也许你可以用这个概念来解决你的问题。为了提供一个示例,
网格.Row
网格.Column
属性是附加到
网格
内元素的属性

<Grid>
  ...
  <TextBlock Grid.Row="1" Grid.Column="2" ... />
</Grid>

...
TextBlock
类不知道
网格使用的
网格.Row
网格.Column
属性

<Grid>
  ...
  <TextBlock Grid.Row="1" Grid.Column="2" ... />
</Grid>

您可以阅读更多信息。

WPF有一个强大的概念,名为“附加属性”。我不知道你想做什么,但也许你可以用这个概念来解决你的问题。为了提供一个示例,
网格.Row
网格.Column
属性是附加到
网格
内元素的属性

<Grid>
  ...
  <TextBlock Grid.Row="1" Grid.Column="2" ... />
</Grid>

...
TextBlock
类不知道
网格使用的
网格.Row
网格.Column
属性

<Grid>
  ...
  <TextBlock Grid.Row="1" Grid.Column="2" ... />
</Grid>

你可以多读一些。

我应该说得更具体一点;在这个例子中,变量是一个对象,所以我认为这是行不通的,很好的建议,但是这种方法怎么会行不通呢?附加属性可以是任何类型。我使用了一种稍微不同的方法,刚刚创建了一个新对象,它存储了对路径的引用和对需要链接到的其他对象的引用。我相信这可以用一种更优雅的方式来完成,但对于我正在做的事情来说似乎还可以;在这个例子中,变量是一个对象,所以我认为这是行不通的,很好的建议,但是这种方法怎么会行不通呢?附加属性可以是任何类型。我使用了一种稍微不同的方法,刚刚创建了一个新对象,它存储了对路径的引用和对需要链接到的其他对象的引用。我相信这可以用一种更优雅的方式来完成,但对于我正在做的事情来说似乎还可以。