C#字段与属性

Bar*_*uch 7 c# properties

可能重复:
C#中属性和字段之间的差异

我认为基本属性({ get; set; })与公共字段相同,只有能够在不破坏二进制兼容性的情况下更改它们的优点.按照我的答案/sf/answers/611471241/,我发现属性也有缺点.如果它们是值类型,则无法通过引用访问它们.为什么会这样,还有其他什么差异?

vcs*_*nes 14

我发现属性也有缺点.如果它们是值类型,则无法通过引用访问它们.为什么是这样

因为在封面下,财产只是一种方法.如果你看看IL,你会看到像get_PropertyName和的方法set_PropertyName.问题是为了支持使用引用,您需要能够返回方法的引用.

public ref T MyProperty
{
    get
    {
         return ref _underlyingField;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:从C#7.0开始,可以使用上面描述的语法.

以前答案的剩余部分:

当然,这在CLR中完全可能的 ; 但没有被C#语言暴露.

尽管有可能,但CLR需要进行一些调整以保证其可验证性.该属性的语法必须支持它.

但是,这有用吗?如你所说,一个领域可以做到.如果你需要它; 使用一个字段.支持它需要做很多工作.很可能只有少数情况适合; 并且会创建许多案例,首先使用一个字段可能会更好.