2009-11-12 11 views
40

माइक्रोसॉफ्ट प्रतिबिंब और शायद गुणों का उपयोग करने के बजाय निर्भरता गुणों और निर्भरता वस्तुओं को बनाने का मार्ग क्यों चला गया?निर्भरता गुण क्यों?

+0

तो निर्भरता गुणों के डिफ़ॉल्ट मान कहां संग्रहीत किए जाते हैं। वे स्मृति भी ले रहे थे, है ना? अगर हम टेक्स्टबॉक्स नियंत्रण के "टेक्स्ट" डीपी को भी बदलते हैं, तो बदलते मान को उस ऑब्जेक्ट (विशेष टेक्स्टबॉक्स) के हैशटेबल में ही संग्रहीत किया जाएगा? यदि यह मामला है, तो डिफ़ॉल्ट मान + मूल्य बदल गया .. स्मृति को दोगुना करना ..ufff। मुझे अपने विचारों को जानने दें, राकेश www.qtricks.com –

+0

@ राजेश कुमार: डिफ़ॉल्ट मान स्थिर रूप से संग्रहीत किए जाते हैं। इसलिए कम पदचिह्न क्योंकि आपके पास सभी उदाहरणों के लिए केवल एक मूल्य है। – user879355

उत्तर

64

यह मैं तर्क को समझने में मदद:,

मुख्य अंतर यह है कि एक सामान्य नेट संपत्ति के मूल्य सीधे अपनी कक्षा में एक निजी सदस्य से पढ़ी जाती है, एक DependencyProperty का मूल्य जबकि GetValue() विधि को कॉल करते समय गतिशील रूप से हल किया गया है जो DependencyObject से विरासत में मिला है।

आप किसी निर्भरता संपत्ति यह आपके वस्तु का एक क्षेत्र में संग्रहीत नहीं है के एक मूल्य सेट करते हैं, लेकिन चाबियों का एक शब्दकोश में और आधार वर्ग DependencyObject द्वारा प्रदान की महत्व देता है। प्रविष्टि की कुंजी संपत्ति का नाम है और मान वह मान है जिसे आप सेट करना चाहते हैं।

निर्भरता गुणों का लाभ इस प्रकार हैं:

कम स्मृति पदचिह्न

यह प्रत्येक संपत्ति के लिए एक क्षेत्र स्टोर करने के लिए जब आपको लगता है एक बहुत बड़ा अपव्यय है कि एक यूआई के गुणों का 90% से अधिक नियंत्रण आमतौर पर इसके प्रारंभिक मूल्यों पर रहते हैं। निर्भरता गुण उदाहरण में संशोधित गुणों को स्टोर करके इन समस्याओं को हल करते हैं। एक बार निर्भरता संपत्ति के भीतर डिफ़ॉल्ट मान संग्रहीत किए जाते हैं।

मूल्य विरासत

आप किसी निर्भरता संपत्ति के मूल्य एक मूल्य के संकल्प रणनीति का उपयोग करके हल हो गई है का उपयोग करते हैं। यदि कोई स्थानीय मान सेट नहीं किया गया है, तो निर्भरता प्रॉपर्टी लॉजिकल पेड़ को तब तक नेविगेट करती है जब तक कि उसे कोई मूल्य न मिले। जब आप रूट तत्व पर फ़ॉन्ट आकार सेट करते हैं तो यह मान को ओवरराइड करने के अलावा नीचे दिए गए सभी टेक्स्टब्लॉक पर लागू होता है।

बदलने की सूचना

निर्भरता गुण निर्मित एक परिवर्तन सूचना तंत्र है। संपत्ति मेटाडेटा में कॉलबैक पंजीकृत करके आपको अधिसूचित किया जाता है, जब संपत्ति का मूल्य बदल दिया गया है। यह डाटाबेसिंग द्वारा भी प्रयोग किया जाता है।

से: WPF Tutorials

+1

महान उत्तर के लिए धन्यवाद। डीपी पर सभी एमएसडीएन दस्तावेज पढ़ने के बाद भी, जब तक मैं आपकी प्रतिक्रिया नहीं पढ़ता तब तक मैं अभी भी थोड़ा रहस्यमय था। –

8

Dependency properties प्रतिबिंब और विशेषताओं की तुलना में एक अलग उपयोग परिदृश्य हल करें।

निर्भरता गुण उन चीजों को करने के लिए एक एकल, सुसंगत एपीआई प्रदान करते हैं जो मानक गुण संभाल नहीं सकते हैं।

  • कक्षाओं को ओवरहेड के बिना बड़ी संख्या में गुण प्रदान करने की अनुमति दें (क्योंकि वे केवल बनाए जाते हैं, स्थिर रूप से, जब उपयोग किए जाते हैं, प्रति वर्ग एक बार नहीं)।
  • निर्भरता संपत्ति प्रणाली मानक निर्भरता गुणों के अनुरूप Attached Properties जैसी चीजों को संभालती है।
  • निर्भरता गुण change tracking as well as validation के लिए एक स्वच्छ API प्रदान करते हैं।
  • निर्भरता गुण property value inheritance प्रदान करते हैं।
  • निर्भरता गुण great performance benefits प्रदान करते हैं जब डेटा बाध्य होता है।
संबंधित मुद्दे