2013-10-18 9 views
14

Dlaczego właściwość zależności musi być statyczna?Dlaczego właściwości zależności w WPF muszą być statyczne

Widziałem, że zostało już zadane w tym miejscu, ale nie jestem w stanie zrozumieć go poprawnie.

Będzie świetnie, jeśli ktoś pomoże mi zrozumieć również za pomocą małego fragmentu.

+0

możliwy duplikat [Niestacjonarnych właściwości zależności] (http://stackoverflow.com/questions/3660696/non-static-dependency-properties) –

+0

Wyjaśnienie w odpowiedzi na powyższe pytanie jest dość podstawowe, proszę zapoznaj się z podstawami, a następnie możemy debatować, czy ograniczenia są ważne. –

+0

@ M.Babcock: To właśnie powiedziałem w opisie, że widziałem już kilka wyjaśnień, ale które nie są wyczerpujące. Widziałem już link, który podałeś przed napisaniem mojego pytania tutaj, a także, jak również widziałem to http://stackoverflow.com/questions/2989431/why-are-dependency-properties-static – Learner

Odpowiedz

25

Magia tutaj jest, deklaracja DependencyProperty jest static nie jego value (tj. Pamięci). Deklaracja dodana za pomocą słowa kluczowego static jest tylko identyfikatorem DependencyProperty dla DependencyObject, ponieważ ten sam identyfikator będzie wspólny dla wszystkich wystąpień tego obiektu DependencyObject w celu zidentyfikowania właściwości, dlatego ma sens, aby był on static.

Z drugiej strony, kiedy ustawić wartość DependancyProperty wywołując SetValue na DependancyObject instancji, a następnie każde wystąpienie DependancyObject na którym setValue nazywa zachowa swoją lokalną wartość nieruchomości. Jest to obsługiwane wewnętrznie przez klasę DependancyObject, która zachowuje rodzaj Dictionary, który ma odwzorowanie między identyfikatorem DependancyProperty a wartością lokalną.

+0

Dziękuję bardzo Nit, to bardzo mi pomaga. Poszukuję też dobrego fragmentu, w którym mogę go lepiej zrozumieć. – Learner

+0

Nie rozumiem tej linii - "Ten sam identyfikator będzie wspólny dla wszystkich wystąpień tego obiektu zależności" Będzie świetnie, jeśli mógłbyś mi wyjaśnić, jestem początkującym programistą :( – Learner

+1

możesz wziąć to jako klucz kluczowej analizy Słownika, że ​​DependancyObject musi przechowywać wartość właściwości dependency, ponieważ każda instancja może mieć inną wartość właściwości, ale w celu zidentyfikowania tej wartości nie potrzebujemy różnych kluczy, ponieważ wartość każdej instancji odpowiada temu samemu kluczu. dlatego jest statyczny – Nitin

5

DependencyProperty musi być statyczne (poziom klasy) ponieważ podczas tworzenia wielu obiektów tej klasy, który ma tę właściwość i chcą odnieść wartość domyślną dla tej właściwości wartość musi pochodzić z tej statycznej instancji DependencyProperty. Tak więc domyślna wartość dla wszystkich wystąpień naszej klasy jest taka sama i system nie rezerwuje pamięci dla DependencyProperty na każdym wystąpieniu tej klasy. W ten sposób zmniejsza się ślad pamięci.

Teraz następne pytanie powstać co jeśli jawnie ustawić wartość na DependencyProperty dla obiektów klasy. (Według kodu lub przez animację lub przez Style)

W tym przypadku DependencyObject wchodzi zdjęcie. Każda klasa, która ma DependencyProperty musi pochodzić z klasy DependencyObject (klasa specyficzna dla WPF, która przechowuje kolekcję o nazwie EffectiveValues ​​). Gdy użytkownik ustawi wartość DependencyProperty o wartości jawnie na obiekcie klasy (według kodu lub według animacji lub stylu), wartość jest przechowywana w tej kolekcji EffectiveValues, która znajduje się w klasie DependencyObject i tam jest przechowywana.

+0

Świetna odpowiedź; jednak DependencyObject nie jest klasą specyficzną dla WPF - jest również dostępna w Silverlight i WinRT. –

Powiązane problemy