2011-09-03 7 views
5

W złożonej formie mam właściwość o nazwie Readonly, która określa, czy wszystko jest edytowalne, czy nie. Do tej pory przekazuję tę właściwość do wszystkich formantów niestandardowych w tej formie przez konstruktor, aw innych miejscach uzyskuję dostęp do samego formularza, aby uzyskać wartość.Czy używasz właściwości statycznej w formie złej praktyki, wiedząc, że istnieje tylko jedno wystąpienie formularza?

Ale to szybko staje się zbyt skomplikowane.
Myślę o nadaniu tej właściwości statycznej w formularzu, wiedząc, że w aplikacji jest tylko jedno wystąpienie tego formularza.

Czy można użyć tej właściwości jako statycznej w tym przypadku? Lub jest to zła praktyka, nawet jeśli istnieje tylko jedna instancja formularza.

Odpowiedz

3

Po prostu zadaj sobie pytanie: czy dotyczy to formularza lub typu formularza. Hipotetycznie, gdyby było więcej niż jeden formularz - czy wszystkie byłyby tylko do odczytu/nie w tym samym czasie? Czy może to być w formie?

Następnie: masz odpowiedź. Podejrzewam, że powinna to być instancja (niestatyczna).

+0

Właściwie jest to związane z postaci i przekształcenie go do statycznego tylko uproszczenie radzenia sobie z nim zamiast przekazywać je (lub dostęp do niego) wszędzie. –

+0

@FrenchBoy brzmi jak zrobić coś brzydkiego, aby być leniwym, IMO –

+0

Yup: $, to wszystko. Zastanawiam się, jakie to brzydkie. –

4

Nawet jeśli twoja pojedyncza instancja formularza przy użyciu pola statycznego nie czyni jej bezpiecznym. Możesz mieć wiele wątków, które powodują problemy. Nie wspominając o trudnościach z testowaniem aplikacji przez jednostkę. Osobiście staram się unikać pól statycznych w jak największym stopniu.

1

Oto alternatywne rozwiązanie:

  1. Dodaj formantów do formularza jak zwykle
  2. Załóż interfejs o nazwie IReadOnlyToggable który ma właściwość IsReadOnly i niech forma realizacji.
  3. Dodaj następującą właściwość do kontroli niestandardowych:

Kod:

public bool IsFormReadOnly 
{ 
    get 
    { 
     var form = ParentForm as IReadOnlyToggable; 
     return form != null && form.IsReadOnly; 
    } 
} 
Powiązane problemy