2009-07-13 73 views

Trả lời

26

Bạn sẽ muốn sử dụng reflection.

Dưới đây là một ví dụ đơn giản:

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

Bây giờ đây là một rất ví dụ đơn giản, không có sự kiểm tra lỗi và cũng bỏ qua các vấn đề lớn hơn như phải làm gì nếu loại sống trong lắp ráp khác nhưng tôi nghĩ điều này sẽ giúp bạn đi đúng hướng.

+0

Miễn là lắp ráp được tải và tên tệp là đủ điều kiện lắp ráp, bạn là vàng. –

+0

Hmm ... Tôi ', tìm ví dụ của bạn để trả về null trong "Type.GetType (myclass);" – pistacchio

+1

Đó là bởi vì assembly có chứa myclass chưa được nạp vào appdomain. Bạn sẽ phải lấy tên assembly từ người gọi và làm Assembly.LoadFrom hoặc một trong nhiều biến thể để nạp assembly trước. – Will

8

Something như thế này:

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

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

Bạn nên sửa đổi những lá cờ ràng buộc theo phương thức mà bạn muốn gọi, cũng như kiểm tra các phương pháp Type.InvokeMember trong MSDN để chắc chắn về những gì bạn thực sự cần.

+0

-1 Điều này không biên dịch. –

+1

Bạn đúng, xin lỗi tôi. Đã chỉnh sửa để thêm đối số phương thức không thể bỏ qua (C# 4.0 trong đó nghệ thuật ngươi) :) –

-3

Lý do của bạn để thực hiện việc này là gì? Nhiều hơn khả năng bạn có thể làm điều này mà không cần phản ánh, lên đến và bao gồm cả tải lắp ráp động.

Các vấn đề liên quan