C# 在1 go中实例化和属性设置
这是如何评估的,比如,流量是多少 这: 可以转化为:C# 在1 go中实例化和属性设置,c#,asp.net-mvc,C#,Asp.net Mvc,这是如何评估的,比如,流量是多少 这: 可以转化为: var tag = new TagBuilder("a") { MergeAttribute("href", pageUrl(i)), InnerHtml = i.ToString() }; 是不是: 安装新对象 解析参数并设置它 将所有值指定给属性 实际上,它是否意味着同样的事情,为什么和如何 即使没有正在解析的“a”,它还会实例化对象并为所有属性值提供默认值吗?首先,您不能在对象初始值设定项中调用方法。所以你可能有这个:
var tag = new TagBuilder("a")
{
MergeAttribute("href", pageUrl(i)),
InnerHtml = i.ToString()
};
是不是:
即使没有正在解析的
“a”
,它还会实例化对象并为所有属性值提供默认值吗?首先,您不能在对象初始值设定项中调用方法。所以你可能有这个:
var tag = new TagBuilder("a")
{
// MergeAttribute("href", pageUrl(i)), you can not do this
InnerHtml = i.ToString()
};
正如@RadimKohler所说,这是一个由编译器提供的语法糖。您编写这样的代码,在编译时,编译器将完成其余的工作。因此,编译器生成的代码,例如:
TagBuilder tag = new TagBuilder("a");
tag.InnerHtml = i.ToString();
// the rest of your code...
本规范§7.6.10.2对象初始值设定项对此进行了解释。引用其中一个示例,说明如何编译对象初始值设定项: 以下类表示具有两个坐标的点:
public class Point
{
int x, y;
public int X { get { return x; } set { x = value; } }
public int Y { get { return y; } set { y = value; } }
}
点的实例可以按如下方式创建和初始化:
Point a = new Point { X = 0, Y = 1 };
这和
Point __a = new Point();
__a.X = 0;
__a.Y = 1;
Point a = __a;
其中,\u a
是一个不可见且不可访问的临时文件
变数
它只是编译器提供的语法糖。结果是100%相同。您的第二个代码段将无法编译,无法从对象初始值设定项调用方法。我不知道你为什么要说“解析”,C#不是一种解释语言。谢谢你的评论
Point __a = new Point();
__a.X = 0;
__a.Y = 1;
Point a = __a;