मैं रनटाइम असेंबली लोड कर रहा हूं, लेकिन मुझे किसी वर्ग या विधियों के नाम नहीं पता हैं। मैं अपनी असेंबली में सभी कक्षाओं को उनकी घोषित विधियों के साथ सूचीबद्ध नहीं करना चाहता, न कि सिस्टम से प्राप्त। ऑब्जेक्ट।रनटाइम असेंबली लोड करते समय, मैं केवल घोषित विधियों को कैसे ढूंढूं?
public class component01
{
public string myName = "component01";
public string getMyName()
{
return myName;
}
}
public class component02
{
public string myName = "component02";
public string getMyName()
{
return myName;
}
}
परिणाम:
component01
component02
And if i remove the bindingflag:
component01
getMyName
ToString
Equals
GetHashcode
GetType
component02
getMyName
ToString
Equals
GetHashcode
GetType
मैं केवल getMyName
विधि से पता चला चाहते
string str = "";
Assembly assembly = Assembly.LoadFile(@"c:\components.dll");
foreach (Type type in assembly.GetTypes())
{
if (type.IsClass == true)
{
str += type.Name + "\n";
MethodInfo[] methodInfo = type.GetMethods(BindingFlags.DeclaredOnly);
foreach (MethodInfo mi in methodInfo)
{
str += "\t" + mi.Name + "\n";
}
}
}
MessageBox.Show(str);
यह components.dll है:
इस कोड है।
BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly
आप अपनी आवश्यकताओं पर निर्भर करता है BindingFlags.NonPublic
में डालने के लिए और साथ ही, कर सकते हैं:
पूरी तरह से काम करता है, धन्यवाद! मैंने पहले सार्वजनिक और घोषित दोनों का उपयोग करने की कोशिश की, लेकिन यह काम नहीं किया। मुझे तीनों को निर्दिष्ट करने की आवश्यकता कैसे है? – Bildsoe
@ बिल्डसो: 'System.Reflection.BindingFlags' एक झंडे-enum है। जब 'इंस्टेंस' ध्वज सेट नहीं होता है, तो' GetMethods' में इंस्टेंस विधियों को शामिल नहीं किया जाता है। – Ani
ठीक है, धन्यवाद। मैंने सोचा कि, यदि विधि का उल्लेख किया गया था तो इसमें शामिल होगा। – Bildsoe