C#私有变量&;java私有变量getter&;塞特差异?
我试图理解带有getter和setter的C#自动变量声明与java声明之间的区别 在java中,我通常会这样做:C#私有变量&;java私有变量getter&;塞特差异?,c#,java,getter-setter,C#,Java,Getter Setter,我试图理解带有getter和setter的C#自动变量声明与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}; 但这根本不允许访问变量。
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#中定义的自动属性无论如何都将编译为getter和setter方法。它们被归类为“句法糖” 这: …编译为:
private int <>k____BackingFieldWithRandomName;
public int get_Test() {
return <>k____BackingFieldWithRandomName;
}
public void set_Test(int value) {
<>k____BackingFieldWithRandomName = value;
}
private int k______________________backingfield with randomname;
公共int get_测试(){
使用随机名称返回k____;backingfield;
}
公共无效集_测试(int值){
k______backingfield,随机名称=值;
}
完全一样
您在C#中定义的自动属性无论如何都将编译为getter和setter方法。它们被归类为“句法糖”
这:
…编译为:
private int <>k____BackingFieldWithRandomName;
public int get_Test() {
return <>k____BackingFieldWithRandomName;
}
public void set_Test(int value) {
<>k____BackingFieldWithRandomName = value;
}
private int k______________________backingfield with randomname;
公共int get_测试(){
使用随机名称返回k____;backingfield;
}
公共无效集_测试(int值){
k______backingfield,随机名称=值;
}
在第一个示例中,您有一个支持字段
在C#
中,您可以执行以下操作:
private int test { get; set; };
或者将属性
公开(完全有效)
您还可以在C#
中使用支持字段,这些字段在该语言引入之前更为常见
例如:
private int _number = 0;
public int test
{
get { return _number; }
set { _number = value; }
}
在上面的示例中,
test
是一个公共属性
,它访问一个private
字段
,在第一个示例中,您有一个backing字段
在C#
中,您可以执行以下操作:
private int test { get; set; };
或者将属性
公开(完全有效)
您还可以在C#
中使用支持字段,这些字段在该语言引入之前更为常见
例如:
private int _number = 0;
public int test
{
get { return _number; }
set { _number = value; }
}
在上面的例子中,
test
是一个公共的属性
,它访问一个private
字段
,下面是一个解决方案,它由C编译器提供,用于创建getter和setter方法
private int test;
public int Test{
public get{
return this.test;
}
public set{
this.test = value;
}
}
下面是C#编译器提供的解决方案,用于创建getter和setter方法
private int test;
public int Test{
public get{
return this.test;
}
public set{
this.test = value;
}
}
但在C#中,我将变量声明为“public”。而在java中,它被声明为私有的。这有什么影响吗?没有。编译器将为您创建一个私有备份字段。我将编辑我的帖子。但在C#中,我将变量声明为“public”。而在java中,它被声明为私有的。这有什么影响吗?没有。编译器将为您创建一个私有备份字段。我将编辑我的帖子。你的第一段C代码根本不会编译-这不是不允许访问变量的问题-这只是无效代码。你的第一段C代码根本不会编译-这不是不允许访问变量的问题-这只是无效代码。所以当我声明
public int test{get;set;}
字段test
对于公共getter和setter是私有的吗?和Java中的一样?这就是@Simon上面所说的。@rtindru-test
是一个属性。这是公共的。@rtindru-如果你做了private int test{get;set;}
,那么test
将是一个私有属性。@rtindru-我修改了我的答案,在字段和属性之间做了一些详细说明。所以当我声明public int test{get;set;}
字段test
对于公共getter和setter是私有的吗?和Java中的一样?这就是@Simon上面所说的。@rtindru-test
是一个属性。这是公共的。@rtindru-如果你做了private int test{get;set;}
,那么test
将是一个私有属性。@rtindru-我修改了我的答案,在字段和属性之间做了更多的解释。