猿问

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

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

我意识到这似乎是在C#中,字段和属性之间有什么区别?但我的问题略有不同(在我看来):

一旦我知道

  • 我将不使用我的类与“只在属性上工作的技术”和
  • 我不会在getter/setter中使用验证代码。

有什么不同(除了样式/未来的开发),比如设置属性的某种类型的控件?

在以下几个方面是否有其他区别:

public string MyString { get; set; }

public string myString;

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


慕尼黑5688855
浏览 620回答 3
3回答

aluckdog

封装在第二个实例中,您刚刚定义了一个变量,在第一个实例中,变量周围有一个getter/setter。因此,如果您决定要在稍后的日期验证该变量-这将容易得多。另外,它们在IntelliSense中的表现也不同:)编辑:更新操作系统更新的问题-如果您想忽略这里的其他建议,另一个原因是OO设计不太好。如果你没有很好的理由这么做,总在公共变量/字段上选择属性。

Cats萌萌

字段和属性看起来是一样的,但事实并非如此。属性是方法,因此有某些属性不支持的东西,还有一些属性可能发生的事情,但在字段中却永远不支持。以下是一系列不同之处:字段可用作out/ref争论。属性不能。一个字段在多次调用时总是会产生相同的结果(如果我们忽略了多个线程的问题)。财产,如DateTime.Now并不总是等于自己。属性可能抛出异常-字段永远不会这样做。属性可能有副作用,或者需要很长时间才能执行。字段没有副作用,对于给定的类型,速度总是与预期的一样快。属性支持getter/setters的不同可访问性-字段不支持(但可以创建字段)。readonly)当使用反射时,属性和字段被视为不同MemberTypes所以它们的位置不同GetFieldsVSGetProperties例如)与字段访问相比,JIT编译器可能对属性访问有很大不同。不过,它可以编译成相同的本机代码,但差异的范围是存在的。
随时随地看视频慕课网APP
我要回答