2008-11-25 11 views
5

Chciałbym, aby klasa implementowała interfejs, nie chcę zmieniać oryginalnej klasy (która dodawałaby niepożądane zależności).Czy mogę zastosować metody rozszerzeń do implementacji interfejsu?

Wiem, że mógłbym odziedziczyć po klasie i sprawić, by jego dziecko implementowało te metody, ale wtedy mam problem z konwersją klasy macierzystej (pochodzącej z danych/ORM) na tę klasę prezentacji.

Jeśli zaimplementuję wszystkie wymagane metody interfejsu, czy będzie on liczony jako ten interfejs, czy nie?

Odpowiedz

12

Nie, nadal nie będzie liczony jako implementacja interfejsu.

Metody rozszerzające to nic innego jak sposób wywoływania metod statycznych w inny sposób. Nie mają one wpływu na tożsamość obiektów, dziedziczenie itp.

+0

Czy istnieje podstawowy powód, dla którego nie mogliby? To znaczy. czy metody rozszerzenia mogą być kompilowane w tożsamość obiektu/interfejsu, a nie tylko syntaktyczny cukier dla metod statycznych? –

+0

@GordonBean: Nie bez ponownego uruchamiania funkcji od nowa, nie. Chodzi o to, że są po prostu cukrem syntaktycznym. Jeśli utworzysz interfejs, mogę dodać do niego metodę rozszerzenia, nawet nie będąc tego świadomym. To naprawdę potężne. –

+0

Dziękuję. Wiele razy znalazłem się chcąc rozszerzyć istniejącą klasę lub interfejs, aby zaimplementował inny interfejs (na przykład, czyniąc wszystkich implementatorów interfejsu IComparowalnym poprzez użycie tylko metod interfejsu). To znaczy. tworzysz interfejs i rozszerzam ten typ interfejsu. Czy jest to funkcja, która ma sens do wdrożenia, czy też myślę o problemie w niewłaściwy sposób? –

Powiązane problemy