2008-11-11 4 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

Когда вы предоставляете только часть собственности get в .Net, вы явно сообщаете компилятору, что это свойство доступно только для чтения. Это большая сделка, чем просто отсутствие set. Это видно в версии синтаксиса свойства vb, где вы также должны явно объявлять свойство ReadOnly.

Что вы можете сделать, это предоставить как получателю, так и сеттерам, но в абстрактном сеттере введите NotImplementedException, украсьте его соответствующими атрибутами и документом, чтобы никто не использовал его, если сеттер не был переопределен. , В противном случае вам, вероятно, лучше не использовать эти методы, чтобы избежать разрыва между версиями кода Java и .NET.

Смежные вопросы