2011-01-27 16 views
8

Çalışma zamanı derleme yükü yapıyorum, ancak sınıfların veya yöntemlerin adlarını bilmiyorum. System.Object öğesinden devralınanlar değil, tüm sınıfları derleme yöntemleriyle listelemedim.Çalışma zamanı derleme yüklemesi yapılırken yalnızca bildirilen yöntemleri nasıl bulabilirim?

public class component01 
{  
    public string myName = "component01"; 
    public string getMyName() 
    { 
     return myName; 
    } 
} 

public class component02 
{  
    public string myName = "component02"; 

    public string getMyName() 
    { 
     return myName; 
    } 
} 

sonuç:

component01 
component02 

And if i remove the bindingflag: 

component01 
    getMyName 
    ToString 
    Equals 
    GetHashcode 
    GetType 
component02 
    getMyName 
    ToString 
    Equals 
    GetHashcode 
    GetType 

Sadece gösterilen getMyName yöntemi istiyorum

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); 

Bu components.dll geçerli:

Bu

kodudur.

BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly 

Sen gereksinimlerine bağlı olarak, hem de BindingFlags.NonPublic koymak isteyebilirsiniz:

cevap

9

Sana bayrakları aradığınız düşünüyorum.

Ben de daha derin miras hiyerarşileri ile, türleriSystem.Object daha diğer baz türlerinden üyelerini devralabilir işaret olacaktır. O tutmak istiyorum, ama olanları aslen object ilan, bunu yapabilirdiniz:

  1. GetMethods çağrı için BindingFlags.DeclaredOnly bayrağı kaldırın. "Ilan" tanımın yöntemi daha karmaşık olsaydı farklı bir filtre gerekebilir Tabii

    methodInfo.GetBaseDefinition().DeclaringType != typeof(object) 
    

:

  • Sadece yönelik yöntemleri içerir.

  • +1

    Mükemmel çalışıyor, teşekkürler! Daha önce hem Public hem de DeclaredOnly kullanmayı denedim, ama bu işe yaramadı. Neden üçünü de belirtmem gerekiyor? – Bildsoe

    +0

    @Bildsoe: 'System.Reflection.BindingFlags' bir flag-enum'dur. Eşgörünüm bayrağı ayarlanmadığında, 'GetMethods' örnek yöntemleri içermez. – Ani

    +1

    tamam, teşekkürler. Sadece düşündüm ki, eğer yöntem söz konusu ise, bu dahil olacaktı. – Bildsoe

    İlgili konular