प्रतिबिंब के माध्यम से आप अज्ञात तरीकों की पहचान कैसे कर सकते हैं?सिस्टम में अज्ञात विधियों की पहचान कैसे करें। प्रतिबिंब
उत्तर
विधि के गुणों को देखें, और देखें कि विधि CompilerGeneratedAttribute से सजाया गया है या नहीं।
बेनामी विधियों (साथ ही साथ अन्य ऑब्जेक्ट्स, जैसे ऑटो-कार्यान्वित गुण इत्यादि) में यह विशेषता शामिल होगी।
उदाहरण के लिए, मान लें कि आपके पास अपनी कक्षा के लिए एक प्रकार है। अनाम तरीकों होगा:
Type myClassType = typeof(MyClass);
IEnumerable<MethodInfo> anonymousMethods = myClassType
.GetMethods(
BindingFlags.NonPublic
| BindingFlags.Public
| BindingFlags.Instance
| BindingFlags.Static)
.Where(method =>
method.GetCustomAttributes(typeof(CompilerGeneratedAttribute)).Any());
यह किसी भी गुमनाम तरीकों MyClass
पर परिभाषित लौटना चाहिए।
और इसलिए कोई अन्य विधि (या सदस्य/प्रकार) कर सकते हैं। – leppie
सच - आप इसे किसी भी विधि पर मैन्युअल रूप से परिभाषित कर सकते हैं, और इसे मूर्ख बना सकते हैं, लेकिन आम तौर पर, इसका उपयोग अनाम विधियों और अन्य संकलक उत्पन्न जानकारी के लिए किया जाता है। –
ऑटो गुणों के लिए, और संपत्ति गेटर्स और सेटर्स पर भी। – leppie
, कि Regex पैटर्न होगा:
<(\w|_)+>b_.+
आप नहीं कर सकते, क्योंकि आईएल स्तर पर एक गुमनाम तरीके के रूप में ऐसी कोई बात नहीं है वहाँ - वे सभी नामित कर रहे हैं, और सभी के हैं नामित प्रकार और जिस तरह से सी # और वीबी कंपाइलर्स नामित विधियों और प्रकारों के लिए अनाम विधियों का अनुवाद करते हैं, पूरी तरह कार्यान्वयन-परिभाषित है, और इस पर भरोसा नहीं किया जा सकता है (जिसका अर्थ है कि, उदाहरण के लिए, यह किसी भी अद्यतन के साथ बदल सकता है, यहां तक कि मामूली रिलीज/हॉटफिक्सेस में भी)।
+1: यह तकनीकी रूप से, "सही" उत्तर है - लेकिन [कंपाइलर जेनरेटेड] अभ्यास में काफी भरोसेमंद काम करता है। –
क्या आप जो कुछ हासिल करना चाहते हैं उसके बारे में कुछ और कह सकते हैं? –