C#3.0自动属性,为什么不直接访问该字段?

Pok*_*kus 12 properties c#-3.0

使用在类的属性中获取/设置的新方法,如:

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

为什么不简单地将属性FirstName公开而没有访问者?

Pat*_*ins 30

直接访问变量内部类(字段/属性)的两个大问题是:

1)您不能轻易地对字段进行数据绑定.

2)如果从类中公开公共字段,则以后不能将它们更改为属性(例如:将验证逻辑添加到setter)

  • @damagednoob - 编译器生成的IL不同,反射代码不同,因为属性和字段不同.这就是为什么它被认为是一个突破性的变化.如果您可以自己重新编译所有客户端代码,并且不使用反射,则它可能对您有用. (2认同)

Coi*_*oin 14

因为,将来如果更改实现,使用当前接口的代码不会中断.

例如,您使用公共字段实现一个简单的类,并开始在某些外部模块中使用您的类.一个月后,您发现需要在该类中实现延迟加载.然后,您需要将字段转换为属性.从ciew的外部模块来看,它看起来可能与语法相同,但事实并非如此.属性是一组函数,而字段是类实例中的偏移量.

通过使用属性,可以有效降低界面更改的风险.