2013-03-04 19 views
8

Zastanawiam się, czy możemy rozważyć metody rozszerzenia jako implementacja wzorca dekoratora w C#? ponieważ cel jest taki sam, ale logika implementacji, jak i koncepcja mogą się różnić?Metody rozszerzeń - Dekorator Wzór

Dzięki!

+5

Jak są w ogóle podobne do wzoru dekoratora? Metody rozszerzeń są po prostu syntaktycznym cukrem do wywoływania metod statycznych. Metody statyczne to "zwykłe stare funkcje". Dekorator jest, gdy obiekt rozszerza działanie innego typu obiektu poprzez zawijanie/delegowanie jego metod lub dodawanie nowych. – millimoose

+4

Myślę, że jest to bardzo dobre/ważne pytanie dla początkujących. Nie jestem pewien, dlaczego głosowanie w dół ... –

+1

Myślę, że tęsknisz zrozumieć coś. Jasne, że rozszerzenie "dekoruje" typ, gdy patrzysz na Intelisense. Ale spójrz na dobrą implementację dekoratora, taką jak 'StreamReader'. Zauważyłeś, że jest to klasa pochodna od 'Stream' i naprawdę dekoruje funkcjonalność Stream .. –

Odpowiedz

7

Wzór dekoratora jest zwykle związany z dodawaniem zachowania do określonych wystąpień typu niezależnie od innych wystąpień. W przypadku metody rozszerzeń ma wpływ na wszystkie wystąpienia typu, które są kompilowane w tym samym zakresie. Twierdzę, że to nie jest część wzoru dekoratora.

6

Myślę, że nie zrozumiałeś poprawnie wzoru dekoratora.
Nie chodzi o dodanie nowych metod. Chodzi o dodanie nowej funkcjonalności do istniejących metod istniejących metod.

Tak, nie, metody rozszerzenia nie są implementacją wzoru dekoratora.

+0

Widzę teraz, ale czy istnieje konkretna implementacja dekoratora w .NET nie jest ukryta w jakiejś bibliotece, z której kiedykolwiek korzystamy? – Mohtaa

+1

Obecnie nie znam żadnej z góry mojej głowy, ale jeśli szukasz przykładu, możesz rzucić okiem [tutaj] (http://stackoverflow.com/a/5551276/572644). Użyłem konkretnego przy objaśnianiu wzoru. –