Próbuję przenieść zestaw SDK napisany w języku Java do języka C#.Odpowiednik anonimowej klasy języka Java w języku C#?
W tym oprogramowaniu istnieje wiele interfejsów "handler" z kilkoma metodami (na przykład: attemptSomethingHandler
z success()
i kilkoma różnymi metodami awaryjnymi). Ten interfejs jest następnie implementowany i tworzony anonimowo w ramach klasy wywołującej i przekazywany do metody attemptSomething
klasy SomethingModel
. Jest to metoda asynchroniczna i ma kilka miejsc, w których może zawieść lub wywołuje inną metodę (przekazując procedurę obsługi). W ten sposób anonimowa implementacja attemptSomethingHandler
może odwoływać się do prywatnych metod w klasie, która wywołuje attemptSomething
.
W języku C# nie można anonimowo zaimplementować interfejsu. Mogłem jawnie zaimplementować nową klasę, ale ta implementacja byłaby unikalna dla tej klasy wywołującej i nie była używana do niczego innego. Co ważniejsze, nie byłbym w stanie uzyskać dostępu do prywatnych metod w klasie telefonicznej, której potrzebuję i nie chcę upubliczniać.
Zasadniczo muszę uruchomić inny kod z klasy wywołującej, w zależności od tego, co dzieje się w metodach klasy SomethingModel
.
Czytałem delegatów, ale wymagałoby to przekazania jak największej liczby delegatów, ponieważ istnieją metody w interfejsie obsługi (o ile wiem). Jaki jest odpowiedni sposób to zrobić w języku C#? Czuję, że brakuje mi bardzo wspólnej strategii programowania. Po prostu musi istnieć łatwy i czysty sposób na uporządkowanie i rozwiązanie tego problemu.
Być może warto zilustrować swoje pytanie za pomocą kodu Java, który próbujesz przesłać, a jak do tej pory próbowałeś? –
Twoje pytanie jest niejasne, więc nie będę jeszcze VTC, ale możesz sprawdzić http://stackoverflow.com/questions/191013/can-ac-sharp-anonymous-class-implement-an-interface –
You może implementować interfejs w wewnętrznej klasie. W ten sposób możesz uzyskać dostęp do prywatnych członków klasy dzwoniących. –