Tôi đang thực hiện tải lắp ráp thời gian chạy, nhưng tôi không biết tên của bất kỳ lớp hoặc phương pháp nào. Tôi không liệt kê tất cả các lớp trong assembly của tôi với các phương thức được khai báo của chúng, không phải các lớp được thừa kế từ System.Object.Làm cách nào để tìm các phương thức được khai báo, khi thực hiện tải lắp ráp thời gian chạy?
Đây là mã:
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);
Đây là components.dll:
public class component01
{
public string myName = "component01";
public string getMyName()
{
return myName;
}
}
public class component02
{
public string myName = "component02";
public string getMyName()
{
return myName;
}
}
Kết quả:
component01
component02
And if i remove the bindingflag:
component01
getMyName
ToString
Equals
GetHashcode
GetType
component02
getMyName
ToString
Equals
GetHashcode
GetType
Tôi chỉ muốn getMyName
phương pháp thể hiện.
Hoạt động hoàn hảo, cảm ơn! Tôi đã thử sử dụng cả hai công khai và DeclaredOnly trước đây, nhưng điều này đã không làm việc. Làm thế nào đến tôi cần phải xác định cả ba? – Bildsoe
@Bildsoe: 'System.Reflection.BindingFlags' là cờ-enum. Khi cờ 'Instance' không được thiết lập,' GetMethods' không bao gồm các phương thức instance. – Ani
ok, cảm ơn. Tôi chỉ nghĩ rằng, nếu phương pháp đó là bất kỳ đề cập nào, nó sẽ được đưa vào. – Bildsoe