2017-07-04 117 views
-2

即时得到一个错误在我的C#代码,我无法弄清楚,为什么错误扩展Shape类

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

您是否在代码中看到'throw new NotImplementedException()'行? –

+0

你的DefiningGeometry引发了这个异常。仔细阅读代码。 – Harsh

+1

所以即时通讯非常新,但它通过添加该行自动完成我的课程, –

回答

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)当你是“扩展”的一类,考虑到DefiningGeometry是一个抽象属性,你会需要它明确地提供一个实现。 C#会自动使用'NotImplementedException'来实现它,至少它可以编译。

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

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

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

+0

downvote的任何理由? – hsoesanto