【问题标题】:Error extending Shape class扩展 Shape 类时出错
【发布时间】:2017-07-04 11:18:44
【问题描述】:

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

【问题讨论】:

  • 您在代码中看到throw new NotImplementedException() 行了吗?
  • 您的 DefiningGeometry 正在抛出该异常。仔细阅读代码。
  • 所以我对 C# 很陌生,但它通过添加该行自动完成了我的课程,
  • 是的,Shape 将在内部访问被覆盖的属性并抛出该异常。
  • 这可能会有所帮助 - 它为三角形指定了 Geometrystackoverflow.com/questions/12374643/wpf-custom-shape

标签: c# .net wpf visual-studio


【解决方案1】:

您的自定义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 类...

【讨论】:

    【解决方案2】:

    只看你展示的那段代码:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-07
      • 1970-01-01
      • 2022-11-28
      • 2018-07-12
      • 2018-05-11
      • 2018-08-24
      • 2018-10-12
      相关资源
      最近更新 更多