2015-10-30 51 views
-1

我写了下面的代码行,但一个错误被突出显示,如下:GET必须声明主体,它没有标记为抽象,EXTERN或部分

GET必须声明主体,它不标记为abstract ,extern或部分

我不明白是什么问题?为什么不能在不破坏get的情况下调用一个方法?

public string NoteColour { get; set { SetFontColour(value); } } 
+0

因为它是不明确的'GET'应该做的事情。如果它会自动生成一个字段,则永远不能设置该字段。 –

回答

6

你如果两个getset没有实现提供了get的实现,因为编译器只允许自动实现的属性。

如果你实现其中任何一个,你也必须为另一个实现。

我希望有这样的事情:

public string NoteColour { get { return GetFontColor(); } set { SetFontColour(value); } } 
+0

虽然这解决了编译器问题,但它现在会创建一个相当不愉快的财产滥用,因为现在存在违反最小惊讶原则的风险。 OP最好直接暴露'GetFontColor()'和'SetFontColour()'方法。 –

+0

不确定。出于某些目的,您希望拥有属性(例如,它们可以绑定到UI)。 –

+0

啊,好点。你可以告诉我最近没有做任何装订,因为我忘了那个。 –

1

的错误提示,您需要为您的get方法提供身体。所以如果你已经创建了自己的属性,那么你必须实现get和set或none。

public string NoteColour 
{ 
    get 
    { 
    return GetMethod(); 
    } 
    set 
    { 
    SetFontColour(value); 
    } 
} 
0

如果你不写机构getset宏被称为它增加了一个隐藏的私有字段为你的财产,以卖场实际值。这是必需的,因为属性没有与其关联的内存,并且只是像处理类对象的方法那样工作。它让你相信不会像以前那样编写令人厌恶的getter或setter方法。

如果你想做自定义的事情(别人而不是简单地封装一个字段),你必须声明两个bodys,因为宏不知道它应该返回哪个字段。

只是为了完整性:

private string noteColor = string.Empty; 

public string NoteColour 
{ 
    get 
    { 
     return this.noteColor; 
    } 
    set 
    { 
     // add custom actions needed here 
     this.noteColor = value; 
    } 
} 
相关问题