C# - 财产澄清

use*_*677 5 c# properties interface

根据定义:

"由于接口本身不是一个对象,我无法初始化它.如果允许接口声明文件,那么它需要存储位置,所以我们不能在接口内声明字段."

有财产说的例子

当我宣布

 string SayHello { get; set; }  
Run Code Online (Sandbox Code Playgroud)

在界面内

get_SayHello( ) ,set_SayHello()在IL 内部挂钩 (当我反汇编时,我可以看到get和set方法).

我的问题仍然是属性需要一些存储位置,那么属性声明如何

允许在界面内.

编辑:这就是我的理解.由于我是C#的新手,我正在寻求你的帮助.

Jar*_*Par 13

你在一个有点错误的假设上操作,属性需要一个支持字段.是的,大多数属性使用支持字段,但这当然不是必需的.我可以实现你的接口没有支持字段,如下所示

class C1 : IFoo {
  public string SayHello {
    get { return "Say Hello"; }
    set { }
  }
}
Run Code Online (Sandbox Code Playgroud)


jas*_*son 6

接口中的属性声明表明任何实现类必须具有此类方法(get_SayHello并且set_SayHello定义为属性),但不指定它们的实现方式.也就是说,界面说明你可以做什么,但现在它是如何完成的(所以你可以得到SayHello"字符串",你可以设置SayHello"字符串").因此,具体来说:在接口中定义属性不会说明支持字段.

此外,属性必须具有支持字段是一种误解.以下不是:

class Example {
    public string SayHello {
        get {
            return "Hello, World!"; 
        } 
        set { }
    }
}
Run Code Online (Sandbox Code Playgroud)

属性只是可通过类字段语法访问的方法.因为它们是方法而不是字段,所以它们是可定义的接口.