为什么对原始值使用表达式主体属性?
Why use expression-bodied properties for primitive values?
表达式主体属性与直接 属性 声明的优缺点是什么?例如,使用有什么好处;
public string Foo => "Bar"
与简单
public string Foo = "Bar"
我的理解是当值来自方法时使用 =>
,例如 lambda 函数。如果值是像字符串或整数这样的原始值,为什么有人会为此使用表达式主体 属性?
这两行代码之间有不少区别:
- 第一个是属性,第二个是字段。例如,您不能
ref
第一个 Foo
.
- 属性 每次都会被求值并且 return 生成一个新对象,即使该对象是相同的字符串文字。该变量被评估一次,使用时它只是被加载。 (请注意,写#1 的更好方法是
public string Foo { get; } = "Bar";
,它也将被初始化一次,然后 return 相同的值)。
- 第一个是只读的(它只是一个getter),而第二个是可变变量,你可以写入它。更接近的等价物是
public readonly string Foo = "Bar";
甚至更好 public static readonly string Foo = "Bar";
表达式主体属性与直接 属性 声明的优缺点是什么?例如,使用有什么好处;
public string Foo => "Bar"
与简单
public string Foo = "Bar"
我的理解是当值来自方法时使用 =>
,例如 lambda 函数。如果值是像字符串或整数这样的原始值,为什么有人会为此使用表达式主体 属性?
这两行代码之间有不少区别:
- 第一个是属性,第二个是字段。例如,您不能
ref
第一个Foo
. - 属性 每次都会被求值并且 return 生成一个新对象,即使该对象是相同的字符串文字。该变量被评估一次,使用时它只是被加载。 (请注意,写#1 的更好方法是
public string Foo { get; } = "Bar";
,它也将被初始化一次,然后 return 相同的值)。 - 第一个是只读的(它只是一个getter),而第二个是可变变量,你可以写入它。更接近的等价物是
public readonly string Foo = "Bar";
甚至更好public static readonly string Foo = "Bar";