为什么我应该使用自动实现的属性而不是字段?

Bil*_*eal 13 .net c#

在这两者之间:

有财产:

class WithProperty
{
    public string MyString {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

有了字段:

class WithField
{
    public string MyString;
}
Run Code Online (Sandbox Code Playgroud)

显然我应该选择第一个.为什么?

我听说过这里的观点是允许接口更改,但如果我有第二个,并将其更改为第一个,则不需要更改其他代码.重新编译时,所有内容都将指向该属性.

我错过了一些重要的东西吗?

dri*_*iis 19

最重要的区别在于,如果您使用字段,以后需要将其更改为属性(例如,强制执行某些验证),则需要重新编译调用代码的所有库.如果名称保持不变,您可以编译完全相同的代码 - 但代码的使用者仍然需要重新编译.这是因为在字段和属性之间生成的用于获取值的IL是不同的.如果它已经是属性,则可以在不强制代码消费者更改的情况下进行更改.

这对您来说可能是也可能不是问题.但该属性的代码量几乎相同,被认为是最佳实践.我总是去找房产.


SLa*_*aks 9

如果您需要在不破坏其他程序集的情况下添加验证或其他逻辑,则可以稍后更改该属性.

此外,该属性可以与数据绑定一起使用.