将私有成员封装为属性和定义没有私有成员的属性之间的区别是什么?

Ram*_*eef 12 c# memory performance properties

封装像这样的私有成员之间有什么区别(性能,内存等)

private int age;
public int Age
{
  get { return age; }
  set { age = value; }
}
Run Code Online (Sandbox Code Playgroud)

并定义这样的属性

public int Age
{
  get ;
  set ;
}
Run Code Online (Sandbox Code Playgroud)

cdh*_*wie 11

在第二种情况下,C#编译器将为您生成一个字段,并生成一个getter和setter来访问它.换句话说,您发布的两个代码示例之间没有功能差异.唯一的区别是私有字段的名称,它将由编译器生成.

  • 差不多这个.请注意,您也可以将setter设置为private:public string Name {get; 私人集; } (2认同)
  • 除了一个不能使自动属性`readonly`阻止其值改变后期构造.仅此一点就阻止了我在许多情况下使用自动属性. (2认同)

Ani*_*Ani 6

是C#编译器生成的代码自动实现的属性几乎相同的第一个例子(它采用的是私有的,支持字段),所以我不会担心太多.

唯一的真正的区别在于,它装饰的财产getter和setter与[CompilerGenerated]属性.这不应该对获取和设置属性的性能产生任何影响.(作为一个小的挑剔,这应该稍微增加程序集的二进制的大小).

我喜欢自动实现的属性,除了简洁之外,它甚至可以防止声明类型访问后备字段而不是属性(后备字段是匿名的).这为代码带来了清晰度,并且通常也使得重构/更改属性实现更容易.