【问题标题】:C# private variable & java private variable getter & setter - Difference?C# 私有变量和 java 私有变量 getter 和 setter - 区别?
【发布时间】:2013-06-22 00:08:58
【问题描述】:

我试图了解 C# 变量的自动声明与 getter 和 setter 与 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; }

这样我就可以从类外部访问变量 test。

我的问题是,这两者有什么区别?将变量公开的 C# 实现是不是一个坏主意?

在 C# 中,我将变量声明为“public”。而在java中它被声明为“私有”。这有什么影响吗?

找到了一个非常好的答案(除了下面的)here

【问题讨论】:

  • 你的第一个sn-p C# 代码根本不会编译——这不是不允许访问变量的问题——它只是无效的代码。

标签: c# java getter-setter


【解决方案1】:

完全一样。

无论如何,您在 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;
}

【讨论】:

  • 但在 C# 中我已将变量声明为“public”。而在java中它被声明为私有的。这有什么影响吗?
  • 没有。编译器将为您创建一个私有支持字段。我会编辑我的帖子。
【解决方案2】:

在第一个示例中,您有一个支持字段。

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

【讨论】:

  • 所以当我声明public int test { get; set; } 字段test 是私有的公共getter 和setter?和Java一样吗?这就是@Simon 上面所说的。
  • @rtindru - test 是一个属性。哪个是公开的。
  • @rtindru - 如果你这样做了private int test { get; set; },那么test 将是私有财产。
  • @rtindru - 我已经修改了我的答案,以便在字段和属性之间进行更多详细说明。
【解决方案3】:

这是C#编译器提供的解决方案,可以轻松创建getter和setter方法。

private int test;

public int Test{
   public get{
      return this.test;
   }
   public set{
      this.test = value;
   }
}

【讨论】:

    猜你喜欢
    • 2014-03-27
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2010-09-29
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多