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#中定义的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;
}
}