C#属性(Property)

  • 内容
  • 评论
  • 相关

属性(property)是一种用于访问对象或类的特性的成员。

属性提供灵活的机制来读取、编写或计算私有字段的值。

属性提供了一种机制,它把读取和写入对象的某些特性与一些操作关联起来。

可以像使用公共数据成员一样使用属性,但实际上属性是称为“访问器”的一种特殊方法,这使得数据在被轻松访问的同时,仍能提供方法的安全性和灵活性。

无参属性

一般看来,常量和字段已经足够刻画实际生活中对象的各种参数。实际上也确实是这样。

属性(property)是一种"高级字段”,它可能带有一个 getter 和一个 setter,它们保护属性的值,使之不会被外部胡乱篡改。

和字段相比,属性实现了对成员的封装。

Java 中有相似的概念(JavaBeans),它要求类中的成员都是私有的,并且提供一个 public 的 getter 和一个 setter,用于让外界访问和修改私有字段的值。

这两个方法的名称以 get 和 set 开头,需要自己手写。

在 C# 中,也可以通过字段和一对读写方法,自己手动实现属性:

class A
{
    private int c;
    public int getC()
    {
        return c;
    }
    public void setC(int value)
    {
        c = value;
    }
}

在这里的私有字段称为支持字段(Backing Field)。

不过,这样做有两个明显缺点,一是必须手打这些代码;二是在访问属性时,必须调用方法,而不能直接使用点号加属性名。

CLR 提供了称为属性的机制,解决了这两个缺点。下面的写法是经过简化了的写法:

private int c { get;  set;  }

如果不想属性有任何特殊行为,从 C# 3 开始,可以使用简易语法get; set;

这样创建的属性叫做自动实现的属性。另外,我们可以直接通过 A.c 访问属性,而非使用 A.getCA.setC 方法了。

实际上,无参属性仅仅是语法糖。通过编译之后使用 iladsm 查看,我们可以发现,编译器自动为我们生成了 get_c 和 sct_c 方法,以及一个支持字段 <c>k_BackingField,如下图所示。

自动实现的属性

本文标题:C#属性(Property)

本文地址:http://www.hosteonscn.com/5011.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注