扩展Shape类时出错

时间:2017-07-04 11:18:45

标签: 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();
    }
}

我得到的错误是:

  

System.NotImplementedException:'方法或操作未实现。'

创建实例的代码:

options.Add(new Meme()
    {
     name  =  option,
            used = 0,
            Width = 50,
            Height = 50,
            Fill = Brushes.Red
        });

2 个答案:

答案 0 :(得分:0)

您的自定义Shape类应该实际返回某种Geometry。这至少会编译:

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);
        }
    }
}

但是如果你不知道从DefiningGeometry属性返回什么几何体,你可能会问自己是否真的想要首先创建一个自定义Shape类......

答案 1 :(得分:-1)

查看您展示的代码:

1)当你“扩展”一个类时,假定DefiningGeometry是一个抽象属性,你需要为它明确地提供一个实现。 C#会使用'NotImplementedException'自动实现它,这样至少它可以编译。

2)我已经尝试了创建实例的代码,并且基于上面的内容,它不应该调用'DefiningGeometry'属性。因此,它实际上不应该抛出'NotImplementedException'。您的代码中可能还有其他内容可能会触发该异常。

- >尝试mm8建议给出一个实际的实现来验证你的代码是否确实调用了DefiningGeometry方法。在不改变这一点的情况下,您的代码应该编译 - 但是如果现在它没有导致异常,那么您的其他代码可能会调用此属性。

- >我猜测在这段代码中,name = option,这里的选项是在其他地方声明的变量(并且它没有调用不同方法的'get'实现) - 因为这可能是另一种可能的解释