首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# 3.0+中属性和字段的区别

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

Stack Overflow用户
提问于 2009-03-17 09:35:35
回答 10查看 75.7K关注 0票数 142

我意识到它似乎是What is the difference between a Field and a Property in C#?的复制品,但我的问题有一点不同(从我的角度来看):

一旦我知道这一点

  • 我不会将我的类与“仅对属性起作用的技术”一起使用,
  • 我也不会在with中使用验证代码

是否有任何不同(除了样式/未来的开发),就像在设置属性时的某种类型的控件?

以下各项之间是否有其他区别:

代码语言:javascript
复制
public string MyString { get; set; }

代码语言:javascript
复制
public string myString;

(我知道,第一个版本需要C# 3.0或更高版本,并且编译器确实创建了私有字段。)

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-03-17 09:38:05

封装。

在第二个实例中,您刚刚定义了一个变量,在第一个实例中,变量周围有一个getter / setter。因此,如果你决定以后再验证这个变量--这会容易得多。

此外,它们在Intellisense中的显示方式也不同:)

编辑: OPs的更新更新问题-如果你想忽略这里的其他建议,另一个原因是它根本不是很好的面向对象设计。如果你没有很好的理由这样做,总是选择一个属性而不是一个公共变量/字段。

票数 119
EN

Stack Overflow用户

发布于 2009-03-17 11:15:57

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

以下是不同点的列表:

  • 字段可用作out/ref参数的输入。属性不能。
  • 字段在多次调用时将始终产生相同的结果(如果我们忽略了多线程的问题)。像itself.
  • Properties这样的属性并不总是等于that.
  • Properties,可能会抛出异常--字段永远不会抛出异常,可能会有副作用,或者执行起来需要很长时间。字段没有副作用,对于给定的类型,其速度总是与预期的一样快。
  • 属性支持不同的getter/setter可访问性-字段不支持(但字段可以使用反射进行readonly)
  • When )属性和字段被视为不同的MemberTypes,因此它们的位置不同(例如,GetFieldsGetProperties )
  • 与字段访问相比,JIT编译器可能会以非常不同的方式处理属性访问。然而,它可以编译成相同的本机代码,但差异的范围是存在的。
票数 165
EN

Stack Overflow用户

发布于 2009-03-17 09:39:38

几个快速、明显的区别

  1. 属性可以有访问者关键字。

public string MyString { get;private set;}

  • 可以在后代中覆盖属性。

公共虚拟字符串MyString { get;protected set;}

票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/653536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档