首页 >后端开发 >C++ >在属性和字段初始化器中,C#'s` =>`ocerator有什么区别?

在属性和字段初始化器中,C#'s` =>`ocerator有什么区别?

DDD
DDD原创
2025-01-30 23:06:12315浏览

What's the Difference Between C#'s `=>` Operator in Properties and Field Initializers?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn