2010-09-16 13 views
9

W MSDN Czytałem ten temat EnumConverter:Pierwsze konwerter typu

Nigdy nie należy utworzyć instancję EnumConverter. Zamiast tego wywołaj metodę GetConverter klasy TypeDescriptor. Aby uzyskać więcej informacji, zobacz przykłady w klasie bazowej TypeConverter.

Czy ktoś wie dlaczego i czy jest to prawda dla moich własnych wdrożonych konwerterów?

Na przykład, mam klasy GradientColor i konwerter GradientColorConverter. Powinienem napisać

new GradientColorConverter().ConvertFrom(colorString) 

lub

TypeDescriptor.GetConverter(typeof(GradientColor)).ConvertFrom(colorString); 

Właściwie to działa w obie strony, ale co jest lepsze?

Odpowiedz

15

Myślę, że ten ostatni TypeDescriptor.GetConverter(typeof(GradientColor)), ponieważ umożliwia innym konwerterom dodanie lub rozszerzenie systemu konwertera, gdy kod jest uruchamiany w innym kontekście (np. Niestandardowe sterowanie uruchamiane w innej aplikacji z własnymi niestandardowymi typekonwerterami).

+0

Jak wiem, typ konwertera określony w atrybucie klasy. Jak to może być inne w innej aplikacji? –

+0

TypeDescriptor odczytuje z systemu typów (atrybuty lub konwersja typu domyślnego), ale rozszerza je, aby umożliwić dostosowywanie w środowisku wykonawczym. Nigdy tego nie robiłem, ale jest w dokumentach. Spójrz na TypeDescriptionProvider. Dzięki temu łatwiej będzie ponownie wykorzystać zajęcia w późniejszej wersji aplikacji. – yzorg

2

ostatnia możliwość. Jeśli zmienisz klasę konwertera typów, kod będzie nadal działał. Rozdzielenie jest dobre.

+0

Masz rację, ale w tym przypadku odbicie zostanie użyte, aby uzyskać typ konwertera z atrybutu. nie jestem pewien, czy to dobrze, jeśli mogę utworzyć instancję konwertera jako typ statyczny. –

Powiązane problemy