这两者是否相同:
private int x;
public int X
{
get { return x; }
set { x = value; }
}
和
public int X
{
get { return x; }
set { x = value; }
}
我的意思是使用第二种情况就足够了,还是有特殊情况我应该使用第一种情况?
因为我有时会看到第一种情况的代码,有时会看到第二种情况的代码,所以我很困惑
这两者是否相同:
private int x;
public int X
{
get { return x; }
set { x = value; }
}
和
public int X
{
get { return x; }
set { x = value; }
}
我的意思是使用第二种情况就足够了,还是有特殊情况我应该使用第一种情况?
因为我有时会看到第一种情况的代码,有时会看到第二种情况的代码,所以我很困惑
第二个不会编译,因为x没有声明!如果您不想对x进行任何控制,那么您可以编写:
public int X { get; set; }
x
如果当前定义范围内不存在,则不能使用第二种情况!
如果您在第二种情况下没有看到x
任何地方的声明,那么它可能是某个父/基类中的受保护字段,尽管这不太可能。
还是您的意思是创建一个没有显式支持字段的自动属性?这种情况或第一种情况是通常发生的情况:
public int X { get; set; }
第二个片段是否成功编译。
以下在概念上相同
private int x;
public int X
{
get { return x; }
set { x = value; }
}
和
public int X {get;set;}
为什么在概念上相同:因为第二条语句将创建一个具有任意名称的支持 int 字段(不一定是 x)
您的第二种情况无法编译 - 因为未定义“x”(小写)。
另一种选择是使用“自动属性”
public int X {get; set;}
所有这一切都是让编译器在幕后自动生成一个支持字段,您无法直接访问该字段,但与您的第一个示例大致相同。