0

这两者是否相同:

private int x;
public int X
{
    get { return x; }
    set { x = value; }
}

public int X
{
    get { return x; }
    set { x = value; }
}

我的意思是使用第二种情况就足够了,还是有特殊情况我应该使用第一种情况?

因为我有时会看到第一种情况的代码,有时会看到第二种情况的代码,所以我很困惑

4

4 回答 4

2

第二个不会编译,因为x没有声明!如果您不想对x进行任何控制,那么您可以编写:

public int X { get; set; }
于 2012-05-17T09:40:46.633 回答
1

x如果当前定义范围内不存在,则不能使用第二种情况!

如果您在第二种情况下没有看到x任何地方的声明,那么它可能是某个父/基类中的受保护字段,尽管这不太可能

还是您的意思是创建一个没有显式支持字段的自动属性?这种情况或第一种情况是通常发生的情况:

public int X { get; set; }
于 2012-05-17T09:38:21.603 回答
1

第二个片段是否成功编译。

以下在概念上相同

private int x;
public int X
{
    get { return x; }
    set { x = value; }
}

public int X {get;set;}

为什么在概念上相同:因为第二条语句将创建一个具有任意名称的支持 int 字段(不一定是 x)

于 2012-05-17T09:38:46.770 回答
1

您的第二种情况无法编译 - 因为未定义“x”(小写)。

另一种选择是使用“自动属性”

public int X {get; set;}

所有这一切都是让编译器在幕后自动生成一个支持字段,您无法直接访问该字段,但与您的第一个示例大致相同。

于 2012-05-17T09:39:24.583 回答