我试图理解C#auto变量与getter&和变量之间的区别。塞特斯& 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中它被声明为“私有”。这有什么影响吗?
找到一个非常好的答案(除了下面的那些)here
答案 0 :(得分: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;
}
答案 1 :(得分:1)
在第一个示例中,您有一个支持字段。
在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
是一个访问Property
private
的公开field
。
答案 2 :(得分:0)
这是解决方案,它由C#编译器提供,可以轻松创建getter和setter方法。
private int test;
public int Test{
public get{
return this.test;
}
public set{
this.test = value;
}
}