【问题标题】:Java to C# ConversionJava 到 C# 的转换
【发布时间】:2008-11-11 16:47:28
【问题描述】:

我需要将几个 Java 类转换为 C#,但我遇到的问题很少。

在 Java 中,我有以下类层次结构:

public abstract class AbstractObject {
    public String getId() {
        return id;
    } 
}

public class ConcreteObject extends AbstractObject {
    public void setId(String id) {
        this.id= id;
    }
}

有一些 AbstractObject 的实现不需要定义 setId(),所以我不能在层次结构中向上移动它。

如何使用属性将其转换为 C#?这可能吗?

【问题讨论】:

    标签: c# java


    【解决方案1】:

    当您在 .Net 中仅提供属性的 get 部分时,您明确告诉编译器该属性是只读的。这比不提供set 更重要。这在属性语法的 vb 版本中很明显,您还必须显式声明该属性为 ReadOnly。

    你可以做的是同时提供一个getter和一个setter,但是在抽象setter中抛出一个NotImplementedException,用适当的属性和文档装饰它,这样除非setter是财产,否则没有人使用它被覆盖。否则,您最好还是将它们保留为方法,以避免 Java 和 .Net 版本的代码之间的脱节。

    【讨论】:

      【解决方案2】:

      我建议使用您已经概述的方法调用,以确保调用者清楚该类的用法。如果您打算使用属性来实现它,那么您可以执行以下操作(可以找到一些关于 new 关键字的文档here)。

      public abstract class AbstractObject {
          protected string id;
          public string Id
          {
              get { return id; }
          }
      }
      
      public class ConcreteObject : AbstractObject
      {
          public new string Id
          {
              get { return base.Id; }
              set { id = value; }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-03-30
        • 1970-01-01
        • 2016-04-22
        • 2012-07-17
        • 2020-02-26
        • 1970-01-01
        • 2016-07-29
        • 2016-02-13
        • 1970-01-01
        相关资源
        最近更新 更多