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")
Có bạn đã thử 'BindingFlags.Instance'? – Steven
vui lòng xem mã đã thay đổi của tôi - GetType ("this") đang cho bạn ngoại lệ vì nó sai ... – Yahia