2008-11-11 81 views
0

我需要將幾個Java類轉換爲C#,但我遇到了一些問題。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#使用屬性?那可能嗎?

回答

2

我會建議使用方法調用,因爲您已經列出來確保調用方清楚該類的用法。如果你使用屬性來實現它,那麼你可以執行以下操作(有關新關鍵字的一些文檔可以在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; } 
    } 
} 
3

當您僅提供.Net中屬性的get部分時,您明確告訴編譯器該屬性是隻讀的。這不僅僅是不提供set這是一個更大的交易。這在屬性語法的vb版本中很明顯,您必須在其中明確聲明該屬性爲ReadOnly。

你可以做的是提供一個getter和setter,但在抽象設置器中拋出一個NotImplementedException,用適當的屬性和文檔裝飾它,以便沒有人使用它,除非setter被屬性覆蓋。否則,您最好將這些方法保留爲方法,以避免Java和.Net版本代碼之間斷開連接。