C# 这两个代码部分相同吗?
片段:C# 这两个代码部分相同吗?,c#,.net-3.5,C#,.net 3.5,片段: private double memberVal; public double MemberVal { get { return memberVal; } set { memberVal= value; } } 及 public double MemberVal { get; set; } 差不多。在第二个示例中,MemberVal不可公开访问。是的,除了第二个示例中MemberVal不可公开之外,该代码是等效的
private double memberVal;
public double MemberVal
{
get { return memberVal; }
set { memberVal= value; }
}
及
public double MemberVal
{
get; set;
}
差不多。在第二个示例中,
MemberVal
不可公开访问。是的,除了第二个示例中MemberVal不可公开之外,该代码是等效的(您的意思是说)。在后一种情况下,编译器会为您生成一个字段。它将有另一个自动生成的名称。否,但现在它们是相同的
private double memberVal;
public double MemberVal
{
get { return memberVal; }
set { memberVal= value; }
}
及
更新
除了——正如Johannes Rössel所指出的——在第一种情况下,您可以从代码访问字段,但在后一种情况下,您不能:-)访问字段
这意味着在第一个代码示例中,您可以在类中直接为属性设置支持成员(即private double memberVal1
例如memberVal=1.1;
),其中在第二个示例中,属性仍然有一个私有支持成员,但它现在不可见。您只能通过属性访问它
private double memberVal;
public double MemberVal
{
get { return memberVal; }
set { memberVal= value; }
}
public double MemberVal
{
get; set;
}
第二个代码片段不应该在.NET2.0上工作,因为它是在.NET3.0中引入的
第二个是第一个的简写符号,但仅适用于.net 3.0或更高版本。除了第一种情况下可以通过代码访问字段,但在后一种情况下不能:-)除了第二个示例中无法访问的自动生成的私有成员。出现错误。MemberVal是公开的。@Johannes Rössel:是的,这很值得一提,已经更新为包含相同的:)这是错误的。MemberVal是公共的。@Samvel-根据您的编辑,它们现在是相同的。第一个代码段将比第二个代码段多使用一个变量,但行为相同。“第一个代码段将比第二个代码段多使用一个变量”。什。该类仍然有属性的私有存储成员,它是自动生成的,不可见,但可以通过refelection和/或在IL中看到。
private double memberVal;
public double MemberVal
{
get { return memberVal; }
set { memberVal= value; }
}
public double MemberVal
{
get; set;
}