0

我试图了解 C# 变量的自动声明与 getter & setter 和 java 声明之间的区别。

在java中我通常这样做:

private int test;

public int getTest() {
    return test;
}

public void setTest(int test) {
    this.test = test;
}

但在 C# 中,我尝试过这样的事情:

private int test { public get; public set};

但这根本不允许访问该变量。所以我最终得到了这个:

public int test { get; set; }

所以这样我就可以从类外部访问变量 test 。

我的问题是,这两者有什么区别?将变量公开的 C# 实现是一个坏主意吗?

在 C# 中,我已将变量声明为“public”。而在java中它被声明为“私有”。这有什么影响吗?

在这里找到了一个非常好的答案(除了下面的答案)

4

3 回答 3

3

完全一样。

无论如何,您在 C# 中定义的自动属性将编译为 getter 和 setter 方法。它们被归类为“语法糖”。

这个:

public int Test { get; set; }

..编译成这样:

private int <>k____BackingFieldWithRandomName;

public int get_Test() {
    return <>k____BackingFieldWithRandomName;
}

public void set_Test(int value) {
    <>k____BackingFieldWithRandomName = value;
}
于 2013-06-25T09:04:22.793 回答
1

在第一个示例中,您有一个支持字段。

C#你可以这样做:

private int test { get; set; };

property公开(完全有效)

public int test { get; set; };

您还可以在 中拥有支持字段,这些在语言中引入PropertiesC#之前更为常见。

例如:

private int _number = 0; 

public int test 
{ 
    get { return _number; }
    set { _number = value; }
}

在上面的示例中,test是一个Property访问private field.

于 2013-06-25T09:05:41.257 回答
0

这是 C# 编译器提供的解决方案,可轻松创建 getter 和 setter 方法。

private int test;

public int Test{
   public get{
      return this.test;
   }
   public set{
      this.test = value;
   }
}
于 2013-06-25T09:06:43.427 回答