C#私有变量&;java私有变量getter&;setter-差异

本文关键字:变量 amp 差异 setter- java getter | 更新日期: 2023-09-27 18:19:44

我正在尝试理解使用getters&setters&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; }

因此,通过这种方式,我可以从类外访问变量测试。

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

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

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

C#私有变量&;java私有变量getter&;setter-差异

这是完全一样的。

您在C#中定义的automatic属性无论如何都会编译为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;
}

在第一个示例中,您有一个后备字段。

C#中,您可以执行:

private int test { get; set; };

或者使property公开(完全有效)

public int test { get; set; };

您也可以在C#中有后备字段,这些字段在Properties引入该语言之前更为常见。

例如:

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

在上述示例中,test是访问private field的公共Property

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

private int test;
public int Test{
   public get{
      return this.test;
   }
   public set{
      this.test = value;
   }
}