加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如果使用对象初始化程序,是否有性能提升,还是令人惊讶?

发布时间:2020-12-15 06:47:42 所属栏目:百科 来源:网络整理
导读:所以,比较是: MyClass foo = new MyClass();foo.Property1 = 4;foo.Property2 = "garfield"; 和 MyClass foo = new MyClass { Property1 = 4,Property2 = "garfield" }; 是句法糖,还是实际上有某种表现获得(不过很可能呢?) 解决方法 使用对象初始化程序实
所以,比较是:
MyClass foo = new MyClass();
foo.Property1 = 4;
foo.Property2 = "garfield";

MyClass foo = new MyClass { Property1 = 4,Property2 = "garfield" };

是句法糖,还是实际上有某种表现获得(不过很可能呢?)

解决方法

使用对象初始化程序实际上可能非常慢,而不是调用构造函数,然后分配属性,因为它具有一个额外的赋值:
MyClass foo = new MyClass();
foo.Property1 = 4;
foo.Property2 = "garfield";

VS

MyClass tmp = new MyClass();
tmp.Property1 = 4;
tmp.Property2 = "garfield";
MyClass foo = tmp;

在将引用分配给变量之前,所有属性都被分配.如果它重用一个变量,这个区别是可见的:

using System;

public class Test
{
    static Test shared;

    string First { get; set; }

    string Second
    {
        set
        {
            Console.WriteLine("Setting second. shared.First={0}",shared == null ? "n/a" : shared.First);
        }
    }

    static void Main()
    {
        shared = new Test { First = "First 1",Second = "Second 1" };
        shared = new Test { First = "First 2",Second = "Second 2" };        
    }
}

输出显示在Main的第二行,当Second被设置(First)之后,shared.First的值仍然是“First 1”,即共享尚未被赋值.

正如马克说的那样,你几乎肯定永远都不会有区别.

匿名类型保证使用构造函数 – 表单在C#3语言规范的7.5.10.6节中给出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读