C#私有变量& java私有变量getter&二传手 - 差异?

时间:2013-06-25 09:02:52

标签: c# java getter-setter

我试图理解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

3 个答案:

答案 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;
   }
}