2013-05-12 5 views
4

В Android Java, если я хочу использовать мой взгляд от не оригинальной темы я пишу так:C#: метод коррекции при инициализации

Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     String text = (String) msg.obj; 
     myTextView.setText(text); 
    } 
}; 

И все работает отлично. Но в Xamarin C# Я пишу:

Handler h = new Handler() 
{ 
    public override void HandleMessage (Message msg) 
    { 

    } 
}; 

и посмотреть invalid initializer member declarator

Как перезагрузить HandleMessage метод? Могу ли я использовать свой вид из другого потока любым другим способом?


Edit: @AntP, этот способ не работает в Xamarin: Only the original thread that created a view hierarchy can touch its views. Но спасибо за вашу поддержку.

Решение:

mActivity.RunOnUiThread(delegate 
{ 
    mTextView.Text = ("Test"); 
}); 
+0

Это не имеет никакого отношения к Android. Удалено тег. – Simon

+2

@Simon, так как класс определен в Android SDK, у него наверняка есть больше, чем «ничего» с Android. –

ответ

1

Вы не можете переопределить методы внутри объекта инициализаторах. Вы должны объявить класс, который наследует Handler и переопределяет HandleMessage:

public class MyHandler : Handler 
{ 
    public override void HandleMessage (Message msg) 
    { 
     // Some stuff 
    } 
} 

От MSDN:

Анонимные типы содержат один или более открытых свойств только для чтения. № другие виды классов, , такие как методы или события, действительны. Выражение, которое используется для инициализации свойства, не может быть нулевым, анонимной функцией или типом указателя.

Следовательно, анонимные типы могут содержать только общедоступные объекты. Не методы.

+0

Более того, у C# нет анонимных классов (такого рода). –

+0

@KirkWoll Спасибо, обновил мой ответ, чтобы отметить, что довольно важный момент. –

+1

На самом деле, я имею в виду, что в Java есть «анонимные классы», а на C# есть «анонимные типы». Несмотря на аналогичные названия звучания, они представляют собой совершенно разные понятия. В Java «анонимный класс» является встроенным * подклассом/реализацией »определенного класса или интерфейса. В C# это просто тип adhoc (который всегда расширяет« объект »), который объявляет кучу свойств. не расширяет реальный тип, что он не участвует в полиморфизме и, следовательно, является главной точкой путаницы, исходящей из Java. –