首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# new语句后面的大括号是做什么的?

C# new语句后面的大括号是做什么的?
EN

Stack Overflow用户
提问于 2010-10-27 23:07:57
回答 4查看 31.7K关注 0票数 64

给出下面的代码,初始化position0的方式和初始化position1的方式有什么不同?它们是等价的吗?如果不是,有何不同?

代码语言:javascript
复制
class Program
{
    static void Main(string[] args)
    {
        Position position0 = new Position() { x=3, y=4 };

        Position position1 = new Position();
        position1.x = 3;
        position1.y = 4;
    }
}

struct Position
{
    public int x, y;
}
EN

回答 4

Stack Overflow用户

发布于 2010-10-27 23:09:57

您的两个代码示例将生成相同的IL。(至少在发布版本中)

票数 2
EN

Stack Overflow用户

发布于 2010-10-28 00:17:08

忘记了所有IL的东西,它只是速记符号。您正在做的是:

a.在一种情况下,您显式地使用默认构造函数,然后设置这两个属性。

b.在另一个例子中,你正在使用新的初始化器语法,它隐式地让编译器做你在a情况下所做的事情。

尽管它们很巧妙,但它们也会为你实现同样的目标。

票数 2
EN

Stack Overflow用户

发布于 2010-10-27 23:09:53

这些是完全等效的。编译器实际上只是将第一个版本转换为第二个版本。

两者之间唯一的区别是,使用第一种方法,您可以做一些很好的事情,比如将初始化版本传递给一个方法:

代码语言:javascript
复制
DoSomethingWithPoint(new Position() { x=3, y=4 });

这比第二个初始化示例的代码行要多得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4034719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档