例如:
public class DesignerPatternBrush : Brush
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想Brush通过添加一个名为的新属性来定义我自己的类Name,但是存在编译器错误:
错误CS0534:'Brushes.DesignerPatternBrush'没有实现继承的抽象成员'System.Windows.Freezable.CreateInstanceCore()'
如何向Name属性添加属性Brush?
请注意此相关问题:如何在WPF中实现自定义画笔?它回答了为什么不能从字面上继承的问题Brush.但是有没有其他方式(例如使用附加属性)来实现我想要的相同效果?
正如编译错误消息所示,Brush 是一个抽象类 --> 你必须实现它的抽象成员
要让 Visual Studio 为您完成所有工作,有一个快捷方式。
选择 Brush 类并按 Alt + Shift + F10 --> 输入抽象类会自动实现:
public class T : Brush
{
protected override Freezable CreateInstanceCore()
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
但这不适用于 Brush 类。Visual Studio自动实现所有可见的方法,但Brush类将一些方法定义为内部抽象
IE:
internal abstract int GetChannelCountCore();
Run Code Online (Sandbox Code Playgroud)
由于 Brush 是在PresentationCore 中定义的,我们将永远无法覆盖程序集外部的抽象方法... --> 不可能从类继承