Преобразование Java в C # - PullRequest
0 голосов
/ 11 ноября 2008

Мне нужно преобразовать несколько классов 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 ]

3 голосов
/ 11 ноября 2008

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

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

2 голосов
/ 11 ноября 2008

Я бы предложил использовать вызовы методов, как вы уже обрисовали, чтобы убедиться, что использование класса понятно для вызывающей стороны. Если вы настроили реализацию с использованием свойств, то вы можете сделать следующее (некоторую документацию по новому ключевому слову можно найти здесь ).

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; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...