栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

纯吸气剂自动属性和表达式主体属性之间有何区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

纯吸气剂自动属性和表达式主体属性之间有何区别?

它们是两种不同事物的语法糖。前者初始化一个后备字段,并在字段初始化期间将其设置为赋值右侧的表达式。后者创建一个

get
与表达式完全相同的表达式。

public override bool CanRead { get; } = true;

相当于

private readonly bool __backingFieldCanRead = true;public override bool CanRead{    get    {        return __backingFieldCanRead;    }}

这个

public override bool CanRead => true;

相当于

public override bool CanRead{    get    {        return true;    }}

他们的行为有所不同。第一种情况在创建对象并初始化字段时设置属性的值,另一种情况在每次调用属性的getter时都会评估表达式。在布尔的简单情况下,行为是相同的。但是,如果该表达式引起副作用,则情况有所不同。考虑以下示例:

class Program{    static void Main(string[] args)    {        var fooBar1 = new FooBar();        Console.WriteLine(fooBar1.Baz);        Console.WriteLine(fooBar1.Baz);        var fooBar2 = new FooBar();        Console.WriteLine(fooBar2.Baz);        Console.WriteLine(fooBar2.Baz);    }}public class FooBar{    private static int counter;    public int Baz => counter++;}

在此,打印“ 0、1、2、3”。

counter
每次调用属性的getter时,静态字段都会增加。但是,使用属性初始化程序:

public int Baz { get; } = counter++;

然后打印“ 0,0,1,1”,因为表达式是在对象的构造函数中求值的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433019.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号