【问题标题】:encapsulation, accessor C# vs Java封装,访问器 C# vs Java
【发布时间】:2015-06-02 19:04:18
【问题描述】:

关于C#Java 中的封装和访问器的快速问题。 C# 中的这段代码是否等同于下面的 Java 中的代码?

C#

class MyClass{

    public string var1 {get; private set;}
    public int var2 {get; private set;}

    public MyClass(string aString, int anInt){
        this.var1= aString;
        this.var2=anInt;
    }

}

java

//Java
class MyClass{

    private String var1;
    private int var2;

    public MyClass(String aString, int anInt){
        this.var1= aString;
        this.var2=anInt;
    }

    public String getVar1(){
        return this.var1;
    }

    public void setVar1(int anInt){
         this.var1 = anInt;
    }

    public int getVar2(){
        return this.var2;
    }

    public void setVar2(String aString){
         this.var2 = aString;
    }

}

我来自java 世界,不确定C# 中的访问器缩短。

【问题讨论】:

  • void intvoid String 不是有效的返回类型...
  • ;) 在没有 IDE 的情况下编写代码时的有趣坏习惯,感谢指正

标签: java c# encapsulation accessor


【解决方案1】:

不,在 C# 代码中,您有私有设置器 - 在您的 Java 代码中它们是公共的。

与 Java 代码等效的 C# 代码是:

public string Var1 { get; set; }
public int Var2 { get; set; }

(我已更改名称以遵循 .NET 命名约定 - 属性为 PascalCased。)

【讨论】:

  • 好的,我现在看到了,尽管有 setter,但要公开 var 还是有点伤痕累累
  • @JimC:您没有声明一个公共变量——只是一个公共属性。支持字段仍然是私有的。
【解决方案2】:

说实话,您可能不应该在其中任何一个中设置公共设置字段。

拥有公共突变体有什么好处?我很少看到有一个公共突变器的理由。

【讨论】:

  • C# 版本没有公共修改器。
  • 我知道。我只是做一个一般性的陈述。 Java one 可以,如果他做到了;放;在 C# 中进行匹配,那么它们都会有 public 并且可能不应该是。
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2011-09-26
  • 1970-01-01
相关资源
最近更新 更多