C# 扩展形状类时出错
我的C#代码出错了,我不知道为什么C# 扩展形状类时出错,c#,.net,wpf,visual-studio,C#,.net,Wpf,Visual Studio,我的C#代码出错了,我不知道为什么 namespace Memory { class Meme : Shape { public int used { get; set; } public string name { get; set; } protected override Geometry DefiningGeometry => throw new NotImplementedException(); } }
namespace Memory
{
class Meme : Shape
{
public int used { get; set; }
public string name { get; set; }
protected override Geometry DefiningGeometry => throw new NotImplementedException();
}
}
我得到的错误是:
System.NotImplementedException:“未实现该方法或操作。”
创建实例的代码:
options.Add(new Meme()
{
name = option,
used = 0,
Width = 50,
Height = 50,
Fill = Brushes.Red
});
您的自定义
Shape
类应该实际返回某种几何体。这将至少编译:
class Meme : Shape
{
public int used { get; set; }
public string name { get; set; }
protected override Geometry DefiningGeometry
{
get
{
return new EllipseGeometry(new Point(50, 50), 45, 20);
}
}
}
但是,如果您不知道从定义几何体
属性返回什么几何体,您可能会问自己是否真的要首先创建一个自定义形状
类…查看显示的代码片段:
1) 当您“扩展”一个类时,鉴于DefiningGeometry是一个抽象属性,您需要显式地为它提供一个实现。C#将使用“NotImplementedException”自动实现它,这样至少它可以编译
2) 我已经尝试过创建实例的代码,基于以上内容,它不应该调用“DefiningGeometry”属性。因此,它实际上不应该抛出“NotImplementedException”。您的代码中可能还有其他东西可能触发该异常
-->请尝试mm8的建议,给出一个实际的实现来验证您的代码是否调用DefiningGeometry方法。在不更改此属性的情况下,您的代码应该进行编译——但如果现在没有导致异常,您的其他代码可能会调用此属性
-->我猜在这段代码中,name=option
,option是在其他地方声明的变量(它没有调用不同方法的“get”实现)——这可能是另一种可能的解释。您看到了抛出新的NotImplementedException()吗
代码中的行?您的定义几何体引发了该异常。仔细阅读代码。我对C非常陌生,但它自动完成了我的类,添加了一行,是的,Shape将在内部访问重写属性并引发异常。这可能会有所帮助-它为三角形指定了几何体
: