2011-07-19 8 views
5

Dzięki metodom rozszerzającym możemy z łatwością dodawać metody do dowolnego typu. Oczywiście otwiera to możliwość w przyszłej wersji .net nie można już wywołać metody rozszerzenia (na przykład typ zawiera teraz metodę z identycznym podpisem do metody rozszerzenia).Metody rozszerzeń do przodu kompatybilne

Czy powinien to być problem?

Jeśli tak, jak mam sobie z tym poradzić i zaprojektować moje metody rozszerzenia, aby zminimalizować zmiany kodu, jeśli tak się stanie?

+0

Jeśli niepokoi Cię to, jednym rozwiązaniem nie będzie stosowanie metod rozszerzeń. ';)' Możesz dziedziczyć po rozszerzonej klasie i dodać metodę w ten sposób. Otrzymasz ostrzeżenia, że ​​ukrywasz nową metodę dodaną później. Lub możesz po prostu usunąć modyfikator parametru "this" z metody statycznej. –

Odpowiedz

6

Jeżeli ramy zmienia się tak bardzo w przyszłość, zawsze będą problemy ze zgodnością. Jeśli zostanie dodana nowa metoda ramowa o tej samej nazwie co metoda rozszerzenia, jest całkiem prawdopodobne, że mają taką samą lub przynajmniej bardzo podobną funkcjonalność, a zresztą i tak należy dokonać refaktoryzacji.

Myślę, że moc metod rozszerzenia jest zbyt duża, aby zignorować tylko z powodu tego ryzyka.

+0

Zgadzam się. Uczyń swoje metody rozszerzenia jako jasne, oczywiste i proste, jak to możliwe. – hatchet

0

Użyj niejasnych nazw metod, które nigdy nie będą używane w ramach.

edit - może niejasne nie było najwłaściwsze słowo, należy zastąpić z sensownego ale mniej wspólnego verbage

próbując uniknąć konfliktów podpis jest naprawdę jedyna strategia unikania kłopotów przeróbka kodu (zakładając, że funkcjonalność metody rozszerzenia musi zostać zachowana, a nie po prostu przekształcona w definicję metody).

+0

Nie jestem fanem tego. Nazwy powinny być jasne. –

+0

Uzgodnione, powinny być znaczące, ale nie sądzę, aby znaczące i niejasne potrzeby wzajemnie się wykluczały. Wyciągnij tezaurus i używaj mniej popularnych, ale oczywistych czasowników. – roken

+1

Jeśli jesteś tak zmartwiony, zawsze możesz dodać przedrostek, np. Ext_Redefine zamiast Redefine. – Blam

0

Obawiam się, że jedyną rzeczą, którą możesz zrobić, to zapewnić unikalne nazwy dla metod rozszerzenia, dzięki czemu masz 100% pewność, że nigdy nie będziesz mieć konfliktu.

Nie mówimy o dodanie nazwy swojego kota nazwą danej metody, tuż starają się być bardziej twórczy :)

Powiązane problemy