美文网首页
C#接口为什么可以”定义“属性(Property)?

C#接口为什么可以”定义“属性(Property)?

作者: 地坛公园 | 来源:发表于2018-09-27 09:53 被阅读0次

前言:
这是自己的不严谨造成的:(

印象的概念中,接口中都是一些方法的集合,通常自己也只会定义方法,但昨天看到一套代码的实现中,有定义了自动实现属性的部分,接口中不是不能定义数据成员吗?

C#3.0的AIP(自动实现属性),C#会自动生成一个private的私有关联字段,更简便的语法:

public interface ITest{
    string msg{get;set;}
}

会有些不解,所以分析了一下IL代码:


image.png

上面的截图中,C#自动为我们生成了get_msg和set_msg两个方法。
下面的msg: instance string() 则是属性的定义:

.property instance string msg()
{
  .get instance string ITest::get_msg()
  .set instance void ITest::set_msg(string)
} // end of property ITest::msg

但并没有看到私有字段的定义,所以我在Class中定义了同样一个属性:

public class App : MonoBehaviour {

    public int FFF { get; set; }

    public int kkk;
    public int KKK {
        get {
            return kkk;
        }
        set {
            kkk = value;
        }
    }

}

定义一个自定义属性和普通的属性,我们看下IL图:


image.png image.png

在App.cs类中,生成了两个字段,kkk是公共的字段,我自己定义的(应该设置成private),
<FFF>k__BackingField:private int32
这是由C#自动生成的私有关联字段。

所以这里突然间想到:

类是”定义“,而接口仅是”声明“。
所以属性在接口中仅仅是一个”声明”。也仅支持AIP自动实现属性。

这时,我让App.cs实现ITest接口后,我需要将ITest中声明的属性进行定义,这样再查看IL代码后,
自动生成的字段就会出现了。

温故而知新呐

相关文章

  • C#接口为什么可以”定义“属性(Property)?

    前言:这是自己的不严谨造成的:( 印象的概念中,接口中都是一些方法的集合,通常自己也只会定义方法,但昨天看到一套代...

  • 属性Property

    property也是一个类,@property成为属性函数,即可以将python定义的方法当做属性访问,可以对属性...

  • 五、属性(Property)的生成

    属性Property的定义 Property定义非常简单,只有名字name和属性attributes。Proper...

  • @property

    使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义...

  • self.property 和 _property

    一、self.property访问 self.property 经过oc消息派发,可以完成属性所定义的“内存管理语...

  • Tip之Self vs _

    在iOS中,定义的属性可以通过self.property或者_property获得.那到底应该用那种呢? 答案是都...

  • 对象_原型

    理解对象 对象 定义有属性property和方法function就是对象。解析属性property:描述对象的状态...

  • Python基础(10)——属性

    属性定义 直接在类里定义 构造函数定义 私有属性 私有属性添加getter和setter方法 使用property...

  • 4.typeScript是怎么定义函数类型的接口?

    用接口定义函数 混合类型的接口:既可以定义函数,也可以象对象一样,定义属性和方法

  • 五、 OC底层面试题

    1.属性&成员变量&属性的区别 属性(property):在OC中是通过@property开头定义,且是带下划线成...

网友评论

      本文标题:C#接口为什么可以”定义“属性(Property)?

      本文链接:https://www.haomeiwen.com/subject/doisoftx.html