2013-10-18 9 views
14

एक निर्भरता संपत्ति स्थिर क्यों होनी चाहिए?डब्ल्यूपीएफ में निर्भरता गुण क्यों स्थिर होना चाहिए

मैंने देखा है कि इसे यहां कुछ पोस्ट में पहले से ही पूछा गया है, लेकिन मैं इसे ठीक से समझने में सक्षम नहीं हूं।

यह बहुत अच्छा होगा अगर कोई मुझे छोटे स्निपेट के साथ समझने में मदद कर सके।

+0

[गैर स्थैतिक निर्भरता गुणों] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/3660696/non-static- निर्भरता-properties) –

+0

उपरोक्त प्रश्न के उत्तर में स्पष्टीकरण बल्कि मौलिक है, कृपया मूलभूत बातें पढ़ें, फिर हम बहस कर सकते हैं कि बाधाएं वैध हैं या नहीं। –

+0

@ एम। बाबाकॉक: मैंने वर्णन में कहा है कि मैंने पहले ही कुछ स्पष्टीकरण देखे हैं लेकिन जो व्यापक नहीं हैं। मैंने पहले ही आपके प्रश्न को लिखने से पहले जो लिंक दिया है, मैंने देखा है, और साथ ही साथ मैंने यह भी देखा है http://stackoverflow.com/questions/2989431/why-are- निर्भरता-properties-static – Learner

उत्तर

25

यहां जादू है, DependencyProperty की घोषणा static है value (यानी मेमोरी स्टोरेज)। static कीवर्ड के साथ जो घोषणा आप जोड़ते हैं वह के लिए DependencyProperty का पहचानकर्ता है क्योंकि उसी पहचानकर्ता को उस निर्भरता के सभी उदाहरणों द्वारा साझा किया जाएगा, जो संपत्ति की पहचान करने के लिए है, इसलिए इसे static बनाने के लिए यह समझ में आता है।

दूसरी ओर, जब आप SetValueDependancyObject पर उदाहरण को फोन करके DependancyProperty का मान सेट है, तो जिस पर setValue कहा जाता है DependancyObject के प्रत्येक उदाहरण के संपत्ति के अपने स्थानीय मान संग्रहीत होगा। इसे DependancyObject वर्ग द्वारा आंतरिक रूप से संभाला जाता है जो Dictionary के प्रकार को बनाए रखता है जिसमें DependancyProperty पहचानकर्ता और स्थानीय मान के बीच मानचित्रण होता है।

+0

आपको बहुत धन्यवाद नाइट, जो मुझे बहुत मदद करता है। मैं कुछ अच्छे स्निपेट की भी तलाश कर रहा हूं जहां मैं इसे बेहतर समझ सकता हूं। – Learner

+0

मुझे यह लाइन समझ में नहीं आती है - "वही पहचानकर्ता उस निर्भरता ऑब्जेक्ट के सभी उदाहरणों द्वारा साझा किया जाएगा" यदि आप मुझे समझा सकते हैं तो यह बहुत अच्छा होगा, मैं प्रोग्रामिंग के लिए नौसिखिया हूं :( – Learner

+1

आप इसे कुंजी के रूप में ले सकते हैं डिक्शनरी ऑब्जेक्ट को डिक्शनेंसी ऑब्जेक्ट को निर्भरता संपत्ति के मूल्य को स्टोर करना होता है। चूंकि प्रत्येक इंस्टेंस में संपत्ति का अलग-अलग मूल्य हो सकता है लेकिन उस मान को पहचानने के लिए हमें अलग-अलग चाबियाँ नहीं चाहिए, क्योंकि प्रत्येक इंस्टेंस का मान एक ही कुंजी के अनुरूप होगा। इसलिए यह स्थिर – Nitin

5

DependencyProperty हो गया है स्थिर (कक्षा स्तर) क्योंकि जब हम वर्ग जो कि संपत्ति है की एक से अधिक ऑब्जेक्ट बना सकते हैं और है कि संपत्ति के मूल्य DependencyProperty की है कि स्थिर उदाहरण से आने के लिए है के लिए डिफ़ॉल्ट मान का उल्लेख करना चाहते हैं। इसलिए हमारी कक्षा के सभी उदाहरणों के लिए डिफ़ॉल्ट मान समान है और सिस्टम उस वर्ग के प्रत्येक उदाहरण पर निर्भरता प्रॉपर्टी के लिए स्मृति आरक्षित नहीं करता है। इस तरह यह स्मृति पदचिह्न को कम करता है।

अब अगले प्रश्न उठता है अगर हम स्पष्ट रूप से वर्ग की वस्तुओं। (कोड करके या एनीमेशन द्वारा या शैली)

के लिए DependencyProperty के मान को सेट इस मामले में DependencyObject में आता है चित्र। डिपेंडेंसीप्रोपर्टी वाले किसी भी वर्ग को निर्भरता ऑब्जेक्ट क्लास (डब्ल्यूपीएफ विशिष्ट वर्ग) से संग्रह को प्रभावी वैल्यूज नाम से संग्रहित किया जाना है)। जब उपयोगकर्ता निर्भरताप्रॉपर्टी के मान वर्ग के ऑब्जेक्ट (कोड या एनीमेशन या स्टाइल द्वारा) पर स्पष्ट रूप से सेट करता है, तो उस निर्भरता वाले संग्रह संग्रह में संग्रहीत किया जाता है जो निर्भरता ऑब्जेक्ट क्लास के भीतर रहता है और वहां स्मृति को आरक्षित करता है।

+0

ग्रेट उत्तर; हालांकि, निर्भरता ऑब्जेक्ट एक डब्ल्यूपीएफ-विशिष्ट वर्ग नहीं है - यह सिल्वरलाइट और विनआरटी में भी उपलब्ध है। –

संबंधित मुद्दे