加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#自动属性

发布时间:2020-12-15 19:33:40 所属栏目:百科 来源:网络整理
导读:C#3.0的自动属性是否完全取代了归档? 我的意思是,我可以直接使用该属性而不是归档作为属性作为私人支持字段.(对不起,我只是这样理解). int a;public int A{ get;set; } 解决方法 当您从代码访问该属性时 – 无论是在类内部还是外部 – 它始终作为属性进行访
C#3.0的自动属性是否完全取代了归档?

我的意思是,我可以直接使用该属性而不是归档作为属性作为私人支持字段.(对不起,我只是这样理解).

int a;

public int A
{
  get;set;
 }

解决方法

当您从代码访问该属性时 – 无论是在类内部还是外部 – 它始终作为属性进行访问.在大多数情况下,这并不重要 – 但它确实意味着您无法通过引用传递它,如果它是一个字段,您将能够做到.

直接访问支持字段(反射旁边)的唯一代码是属性本身.

这是一个纯粹而简单的财产.它不作为字段提供 – 它可作为属性提供. C#编译器不会使用字段访问替换对它的访问.访问它始终是属性访问.当然,它可能由JIT编译器内联,但这没什么特别的.就CLR而言,它只是一个普通的属性(碰巧应用了[CompilerGenerated]属性).

但是要回答你原来的问题 – 是的,自动属性意味着你不需要自己声明支持字段.实际上,这个:

public int Foo { get; set; }

被翻译成

private int <>Foo; // Or some other unspeakable name
public int Foo
{
    get { return <>Foo; }
    set { <>Foo = value; }
}

您无法直接在C#代码中访问生成的字段,因为它具有无法形容的名称.如果您通过反射检查类型,您会看到它存在 – CLR不区分自动实现的属性和“正常”属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读