C# 中 =>
运算符在属性和字段初始化器中的区别
C# 代码中的 =>
运算符用于表达式主体成员,这提供了一种简洁的方式来定义属性或方法。与 lambda 表达式不同,表达式主体成员在幕后生成特定的成员实现。
使用 =>
的属性 getter
以下代码举例说明了表达式主体属性 getter:
<code class="language-csharp">public int MaxHealth => Memory[Address].IsValid ? Memory[Address].Read<int>(Offs.Life.MaxHp) : 0;</code>
编译器将此语句解释为一个属性,其 getter 定义如下:
<code class="language-csharp">public int MaxHealth { get { return Memory[Address].IsValid ? Memory[Address].Read<int>(Offs.Life.MaxHp) : 0; } }</code>
与字段初始化器的字段的区别
比较表达式主体属性和带有字段初始化器的字段,我们观察到:
<code class="language-csharp">// 表达式主体成员属性 public int MaxHealth => x ? y : z; // 带有字段初始化器的字段 public int MaxHealth = x ? y : z;</code>
关键区别在于获取值的方式。表达式主体属性 getter 在每次访问属性时都会被调用,而字段初始化器在实例创建期间只赋值一次。
不是 lambda 表达式
需要注意的是,表达式主体成员与 lambda 表达式不同。lambda 表达式生成委托实例或表达式树,而表达式主体成员指示编译器构造相应的成员实现。
扩展到其他成员类型
表达式主体成员可以应用于各种成员类型,包括属性、索引器、方法和运算符。但是,它们不适用于嵌套类型、事件或字段。
以上是在属性和字段初始化器中,C#'s` =>`ocerator有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!