Преобразование Java в C #: объявление интерфейса и создание экземпляра? - PullRequest
3 голосов
/ 15 января 2012

Я конвертирую некоторый код Java C # для использования в моем приложении MonoDroid.У меня есть некоторые фрагменты, где интерфейсы объявляются и затем инициализируются в объектах.Я не уверен на 100% в наилучшем подходе для их реализации в C #.

Например:

public class NumberPicker {

    public interface Formatter {
        String toString(int value);
    }

    public static final NumberPicker.Formatter TWO_DIGIT_FORMATTER =
            new NumberPicker.Formatter() {
             //some code here
            };

}

Каков эквивалентный или лучший подход для этого в c #?

Ответы [ 3 ]

6 голосов
/ 15 января 2012

для простых «одноразовых» интерфейсов с одной функцией (например, для прослушивателей событий) можно подумать о переписывании кода для использования делегатов и анонимных функций вместо.

delegate String Formatter(int n);
...

Formatter TWO_DIGIT_FORMATTER = delegate(int n) {
                                         //code here
                                       };

затем вы можете использовать TWO_DIGIT_FORMATTER как функцию (TWO_DIGIT_FORMATTER(12)).

Анонимные классы (что происходит в вашем Java-коде) не существуют в C #, но в таких случаях достаточно делегатов.

0 голосов
/ 20 января 2012

Таким образом, я нашел самый простой способ справиться с этой ситуацией - создать частный вложенный класс в вашем основном классе и затем наследовать его от любого количества интерфейсов, сколько вам нужно. Например, IOnClickListener, IOnMouseDownListener, а затем объявите его в верхней части вашего класса и используйте его снова и снова, где это необходимо. Делает это намного проще ... Если у вас есть интерфейсы, которые повторяются или имеют одинаковые имена методов, вы можете объявить их явно, например

IOnClickListener.OnClick (отправитель объекта, EventArgs) {

}

В качестве примера вы, очевидно, захотите использовать реальные имена методов и имена интерфейсов. Также не забудьте избавиться от экземпляра в вашем OnDestroy.

0 голосов
/ 15 января 2012

Вам потребуется создать класс, который реализует интерфейс Formatter, а затем создать его экземпляр.

т.е.

public class MyFormatter : IFormatter
{
     public string ToString(int value)
     {
       //implementation
     }
}

Затем создайте экземпляр MyFormatter с новым оператором.

public static IFormatter TWO_DIGIT_FORMATTER  = new MyFormatter ();

Префикс «I» для интерфейсов - это то, что делается в мире .net, но это не обязательно, просто соглашение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...