C# Java到C的转换

C# Java到C的转换,c#,java,C#,Java,我需要将几个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;

我需要将几个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#?这可能吗?

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


您可以同时提供一个getter和setter,但在抽象setter中抛出一个
NotImplementedException
,用适当的属性和文档对其进行修饰,以便在setter被属性重写之前没有人使用它。否则,您最好还是保留这些方法,以避免Java和.Net版本之间的代码断开连接。

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


您可以同时提供一个getter和setter,但在抽象setter中抛出一个
NotImplementedException
,用适当的属性和文档对其进行修饰,以便在setter被属性重写之前没有人使用它。否则,您最好还是保留这些方法,以避免Java和.Net版本之间的代码断开。

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


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

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