c#中带getter和setter的接口类

use*_*291 15 c# getter interface

我在这里阅读http://msdn.microsoft.com/en-us/library/75e8y5dd%28v=VS.100%29.aspx

可以将get放入接口类但不设置?

因此,如果我想在接口中使用getter和setter,我必须创建旧语法getVar setVar,因为新语法不适合接口类语法?

更新:如果我必须在Interface类中省略set,这是否意味着我不能强制类使setter在这种情况下违背了具有Interface类的目的,因为我只能部分执行?

And*_*odi 36

不,我觉得你误解了.那篇文章是关于具有readonly属性的接口的可能性(只有getter的属性).但是,如果需要,您也可以将setter放在界面中:

interface IHasProperty
{
    string Property{ get;set; }
}
class HasProperty:IHasProperty 
{
    public string Property{ get;set; }
}
Run Code Online (Sandbox Code Playgroud)

  • +1你似乎是迄今为止唯一一个解决OP问题的回答者. (2认同)

Mer*_*ham 12

您可以使用属性语法.使用此组合:

interface ISomething
{
    string Test { get; }
}

class Something : ISomething
{
    public string Test { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

如果您选择,您当然可以在Something.Test中为getter添加完整的实现.为简洁起见,我只使用了支持字段.

请记住,接口定义了必须实现的最小限度的事物.您可以根据需要添加任何肉汁(新方法,访问者,成员等).你甚至可以添加一个公共setter:

interface ISomething
{
    string Test { get; }
}

class Something : ISomething
{
    public string Test { get; set; } // Note that set is public
}
Run Code Online (Sandbox Code Playgroud)

唯一的限制是有人不能使用你添加的肉汁,除非他们有具体类型(类,而不是接口)的引用,或者定义你添加的方法的不同接口.


Nat*_*nst 8

是的,只是省略set;了财产声明.例如:

interface IName
{
    string Name { get; }
}
Run Code Online (Sandbox Code Playgroud)


Ali*_*tad 7

答案实际上是上述答案的混合:在界面上省略了setter并且get; private set;在课堂上有了.