2009-07-13 15 views

cevap

26

gibi

Sen reflection kullanmak isteyeceklerdir. Şimdi bu çok basit bir örnek, hata kontrolü yoksun ve tip başka montaj yaşıyor ama sanırım eğer da ne yapacağını gibi büyük sorunlarımız yok sayar

using System; 
using System.Reflection; 

class Program 
{ 
    static void Main() 
    { 
     caller("Foo", "Bar"); 
    } 

    static void caller(String myclass, String mymethod) 
    { 
     // Get a type from the string 
     Type type = Type.GetType(myclass); 
     // Create an instance of that type 
     Object obj = Activator.CreateInstance(type); 
     // Retrieve the method you are looking for 
     MethodInfo methodInfo = type.GetMethod(mymethod); 
     // Invoke the method on the instance we created above 
     methodInfo.Invoke(obj, null); 
    } 
} 

class Foo 
{ 
    public void Bar() 
    { 
     Console.WriteLine("Bar"); 
    } 
} 

: Burada

basit bir örnek Bu sizi doğru yola koymalı. Böyle

+0

Derleme yüklendiği ve typename derleme kalifiye olduğu sürece, siz altınsınız. –

+0

Hmm ... 'Type.GetType (myclass)' da null dönmek için örneğinizi bulmak; – pistacchio

+1

Bunun nedeni, myclass içeren derlemenin henüz uygulama alanına yüklenmemiş olmasıdır. Montaj ismini arayandan almanız ve Assembly.LoadFrom'u veya montajı ilk önce yüklemek için birçok varyanttan birini yapmanız gerekir. – Will

8

şey:

public object InvokeByName(string typeName, string methodName) 
{ 
    Type callType = Type.GetType(typeName); 

    return callType.InvokeMember(methodName, 
        BindingFlags.InvokeMethod | BindingFlags.Public, 
        null, null, null); 
} 

Arayacağım yanı sıra gerçekten ne gerek belli olmaya msdn içinde Type.InvokeMember yöntemini kontrol etmek isteyen yöntemine göre bağlanma seçeneklerini değiştirmek gerekir.

+0

-1 Bu derleme yapmıyor. –

+1

Haklısınız, özür dilerim. Göz ardı edilemeyen yöntem argümanları eklemek için düzenlenmiştir (C# 4.0 nerede sanatınız var) –

-3

Bunu yapmanın nedeni nedir? Dinamik montaj yüklemesi de dahil olmak üzere bunu yansıma olmadan yapabilirsiniz.

İlgili konular