इस तरह से:
सार्वजनिक वर्ग दूरस्थ स्थिति: रिमोटस्टैटस {सार्वजनिक पूर्णता स्थिति; सार्वजनिक रिमोट स्टेटस कैल्क (रिमोटस्टैटस आर) {टाइप टी = आर। गेटटाइप (); विदेशी मुद्रा (टी.गेटप्रॉपर्टीज () में सम्पत्ति जानकारी पृष्ठ) {this.property (p) = p.GetValue (); उदाहरण उदाहरण थोड़ा सा आसान है (यह जिरा एपीआई से है - रिमोटस्टैटस में 4 गुण हैं), लेकिन कल्पना करें कि बेस क्लास में 30 गुण हैं। मैं उन सभी मानों को मैन्युअल रूप से सेट नहीं करना चाहता हूं, खासकर यदि मेरे उत्तराधिकृत कक्षा में केवल कुछ अतिरिक्त गुण हैं। प्रतिबिंब एक उत्तर पर संकेत करता है।
मैंने देखा कि मैं बेस क्लास कन्स्ट्रक्टर को कॉल कर सकता हूं (मुझे लगता है कि अगर मुझे गलती है तो मुझे सही करें), लेकिन मेरे बेस क्लास में कोई कन्स्ट्रक्टर नहीं है - यह जिरा wsdl से लिया गया है
public remoteStatusCounts (रिमोटस्टैटस आर): बेस (आर) {// डू स्टूफ}
संपादित करें मैं 2 वैध समाधानों की कल्पना कर सकता हूं: ऊपर उल्लिखित एक और कुछ प्रकार की खोजशब्द जैसे this.baseClass
जो कि प्रकार (बेसक्लास)
है और इस तरह के रूप में छेड़छाड़, इस
पर सूचक के प्रकार के रूप में कार्य करना। इसलिए, this.baseClass.name = "जॉनी"
सटीक रूप से this.name = "Johnny"
के रूप में होगा प्रयोजनों के मान लें, बेस क्लास में एक कॉपी कन्स्ट्रक्टर है - अर्थात यह मान्य कोड है:
सार्वजनिक रिमोट स्टेटस कैल्क (रिमोटस्टैटस आर) {रिमोटस्टैटस एमबीज़ = आर; // काम करना}
edit2 यह सवाल एक व्यावहारिक से अधिक एक विचार व्यायाम है - मेरे उद्देश्यों के लिए, मैं बस के रूप में आसानी से ऐसा किया जाता है: (मेरे "बेसक्लास" को संभालने से प्रतियां बना सकते हैं)
सार्वजनिक वर्ग दूरस्थ स्टेटस कैचों {सार्वजनिक पूर्णता स्थिति; सार्वजनिक रिमोटस्टैटस आरस्टैटस; सार्वजनिक रिमोट स्टेटस कैल्क (रिमोटस्टैटस आर) {आरस्टैट = आर; स्थितिकाउंट = getStatusCount (); }}
हाँ, आप ऐसा कर सकते हैं - हालांकि पता है, कि आप चल सकते हैं
आप इसे Type.GetProperties (BindingsFlags)
अधिभार के साथ फ़िल्टर कर सकते हैं।
नोट: आपको शायद कोड पीढ़ी में देखना चाहिए (टी -4 एक विचार होगा, क्योंकि यह बनाम 2008/2010 के साथ दिया गया है), क्योंकि प्रतिबिंब में रनटाइम-निष्पादन जैसे निष्पादन की गति हो सकती है कोडजनन के साथ, आप आसानी से इस थकाऊ काम को संभाल कर सकते हैं और अभी भी एक ही रनटाइम आदि को मैन्युअल रूप से टाइप करना पसंद कर सकते हैं।
उदाहरण:
// एक्सटेंशन विधि कहीं न कहीं सार्वजनिक स्थिर टी कास्ट & lt; T & gt; (यह ऑब्जेक्ट ओ) {रिटर्न (टी) ओ; } सार्वजनिक रिमोट स्टेटस कैल्क (रिमोटस्टैटस आर) {प्रकार टाइप आर = आर। गेटटाइप (); प्रकार प्रकार यह = this.GetType (); अग्रगण (प्रॉपर्टी इन्फो पी प्रकार आर। गेटप्रॉपर्टीज़ ()) {PropertyInfo thisProperty = typeThis.GetProperty (p.Name); MethodInfo castMethod = प्रकार (ExMethods) .GetMethod ("कास्ट")। MakeGenericMethod (पी। प्रॉपर्टी टाइप); Var castedObject = castMethod.Invoke (रिक्त, नया ऑब्जेक्ट [] {पी.गेट वैल्यू (आर, रिक्त)}); इस प्रॉपर्टी .सेट वैल्यू (यह, जाली ऑब्जेक्ट, रिक्त); }}
Comments
Post a Comment