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

前端之家收集整理的这篇文章主要介绍了c# – 如果使用对象初始化程序,是否有性能提升,还是令人惊讶?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以,比较是:
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节中给出.

原文链接:https://www.f2er.com/csharp/94612.html

猜你在找的C#相关文章