为了账号安全,请及时绑定邮箱和手机立即绑定

C#3.0+中属性和字段的区别

C#3.0+中属性和字段的区别

C#
慕尼黑5688855 2019-06-13 17:36:38
C#3.0+中属性和字段的区别我意识到这似乎是在C#中,字段和属性之间有什么区别?但我的问题略有不同(在我看来):一旦我知道我将不使用我的类与“只在属性上工作的技术”和我不会在getter/setter中使用验证代码。有什么不同(除了样式/未来的开发),比如设置属性的某种类型的控件?在以下几个方面是否有其他区别:public string MyString { get; set; }和public string myString;(我知道,第一个版本需要C#3.0或更高版本,编译器确实创建了私有字段。)
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

封装

在第二个实例中,您刚刚定义了一个变量,在第一个实例中,变量周围有一个getter/setter。因此,如果您决定要在稍后的日期验证该变量-这将容易得多。

另外,它们在IntelliSense中的表现也不同:)

编辑:更新操作系统更新的问题-如果您想忽略这里的其他建议,另一个原因是OO设计不太好。如果你没有很好的理由这么做,在公共变量/字段上选择属性。


查看完整回答
反对 回复 2019-06-13
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

字段和属性看起来是一样的,但事实并非如此。属性是方法,因此有某些属性不支持的东西,还有一些属性可能发生的事情,但在字段中却永远不支持。

以下是一系列不同之处:

  • 字段可用作

    out/ref

    争论。属性不能。
  • 一个字段在多次调用时总是会产生相同的结果(如果我们忽略了多个线程的问题)。财产,如

    DateTime.Now

    并不总是等于自己。
  • 属性可能抛出异常-字段永远不会这样做。
  • 属性可能有副作用,或者需要很长时间才能执行。字段没有副作用,对于给定的类型,速度总是与预期的一样快。
  • 属性支持getter/setters的不同可访问性-字段不支持(但可以创建字段)。

    readonly)

  • 当使用反射时,属性和字段被视为不同

    MemberTypes

    所以它们的位置不同

    GetFields

    VS

    GetProperties

    例如)
  • 与字段访问相比,JIT编译器可能对属性访问有很大不同。不过,它可以编译成相同的本机代码,但差异的范围是存在的。


查看完整回答
反对 回复 2019-06-13
  • 3 回答
  • 0 关注
  • 619 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信