C#私有变量&;java私有变量getter&;塞特差异?

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}; 但这根本不允许访问变量。

我试图理解带有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};
但这根本不允许访问变量。 所以我就这样结束了:

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-我修改了我的答案,在字段和属性之间做了更多的解释。