2011-08-28 43 views
9

Tôi đã cố gắng gọi một phương thức theo tên nhưng vấn đề là phương thức mà tôi gọi không thể tĩnh và nó cần phải là của lớp hiện tại.gọi phương thức không tĩnh theo tên

Tôi đã thử các cách để làm việc đó như thế này:

public static void InvokeMenuMethod(string methodName, object sender, EventArgs e) 
    Type calledType = Type.GetType("MyNamespace.MyClass"); 
    calledType.InvokeMember(
    methodName, 
    BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, 
    null, 
    null, 
    new object[] { sender, e } 
); 
} 

Điều này rõ ràng chỉ hoạt động cho các thành viên tĩnh vì vậy tôi cố gắng một cái gì đó như thế này

public static void InvokeMenuMethod(string methodName, object sender, EventArgs e) 
    Type calledType = Type.GetType("this"); 
    calledType.InvokeMember(
    methodName, 
    BindingFlags.InvokeMethod | BindingFlags.Public, 
    null, 
    null, 
    new object[] { sender, e } 
); 
} 

Nhưng tôi nhận được Must specify binding flags describing the invoke operation required (BindingFlags.InvokeMethod CreateInstance GetField SetField GetProperty SetProperty). Parameter name: bindingFlags lỗi .. .

Vậy làm cách nào tôi có thể thực hiện việc này?

EDIT:

Vì vậy:

public void InvokeMenuMethod(string methodName, object sender, EventArgs e) { 
    Type.GetType("this").InvokeMember(
     methodName, 
     BindingFlags.InvokeMethod, 
     null, 
     this, 
     new object[] { sender, e } 
    ); 
} 

Cung cấp một giải pháp NullReferenceException

: Không "này" trong Type.GetType("this")

+0

Có bạn đã thử 'BindingFlags.Instance'? – Steven

+0

vui lòng xem mã đã thay đổi của tôi - GetType ("this") đang cho bạn ngoại lệ vì nó sai ... – Yahia

Trả lời

11

thử

this.GetType().InvokeMember(
    methodName, 
    BindingFlags.InvokeMethod, 
    null, 
    this, 
    new object[] { sender, e } 
); 

Từ MSDN

Nếu InvokeMethod được xác định bởi chính nó, BindingFlags.Public, BindingFlags.Instance, và BindingFlags.Static sẽ được tự động bao gồm

+0

Tôi nhận được NullReferenceException ... –

+0

Tôi đã nhầm lẫn - vui lòng xem mã đã thay đổi ... – Yahia

+0

Đó là 'BindingFlags.Default'. Khi bạn chỉ định bất kỳ 'BindingFlags' nào, bạn sẽ mất mặc định. – SLaks

0

Bạn có thể thêm BingingFlags.Instance.

+0

Bạn có nghĩa là 'BindingFlags.Instance'? –

+0

đó là ý của anh ấy nhưng không cần thiết ... – Yahia

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