给出下面的代码,初始化position0
的方式和初始化position1
的方式有什么不同?它们是等价的吗?如果不是,有何不同?
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;
}
发布于 2010-10-27 23:09:57
您的两个代码示例将生成相同的IL。(至少在发布版本中)
发布于 2010-10-28 00:17:08
忘记了所有IL的东西,它只是速记符号。您正在做的是:
a.在一种情况下,您显式地使用默认构造函数,然后设置这两个属性。
b.在另一个例子中,你正在使用新的初始化器语法,它隐式地让编译器做你在a情况下所做的事情。
尽管它们很巧妙,但它们也会为你实现同样的目标。
发布于 2010-10-27 23:09:53
这些是完全等效的。编译器实际上只是将第一个版本转换为第二个版本。
两者之间唯一的区别是,使用第一种方法,您可以做一些很好的事情,比如将初始化版本传递给一个方法:
DoSomethingWithPoint(new Position() { x=3, y=4 });
这比第二个初始化示例的代码行要多得多。
https://stackoverflow.com/questions/4034719
复制相似问题