2009-09-13 40 views

Trả lời

32

Chỉ

Type.GetType(typeName).GetMethod(methodName).Invoke(null, arguments); 

nơi typeName là tên của các loại như là một chuỗi, methodName là tên của phương pháp như là một chuỗi, và arguments là một mảng của các đối tượng có chứa các đối số để gọi phương thức với .

+0

Wow, ok yeah rằng các công trình - không biết về Type.GetType - chỉ cần đảm bảo rằng tên lớp tĩnh hoàn toàn đủ điều kiện với không gian tên –

+0

làm việc cho *** 'lớp tĩnh bên trong' ***? – Kiquenet

+0

@GeorgeMauer nếu không có không gian tên thì sao? – MonsterMMORPG

1

Dưới đây là một phác thảo cơ bản của bạn sẽ làm gì:

  1. Quét tất cả các đối tượng trong AppDomain hiện tại - tìm một người phù hợp với những gì bạn biết tên lớp là
  2. Lấy phương pháp tĩnh với tên bạn biết trên đối tượng đó
  3. Tự động gọi nó.

Chỉnh sửa: Điều này sẽ hoạt động nếu bạn không biết không gian tên của lớp tĩnh. Nếu không, hãy sử dụng giải pháp của Daniel Brückner đơn giản hơn nhiều.

+0

Tôi nghĩ bạn vẫn cần quét AppDomain - Nếu bạn chỉ có thể tạo một thể hiện của một lớp, đây là ngôn ngữ động –

+1

Type.GetType? http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx – dtb

+2

Đây có thể là một mô tả bằng chữ về những gì đang xảy ra trong quá trình phản chiếu, tuy nhiên tôi không nghĩ câu trả lời này hữu ích cho OP vì nó không thực tế chứng minh hoặc giải thích các bước bạn đã vạch ra có thể được thực hiện bằng cách sử dụng.net framework API – Crippledsmurf

1
System.Reflection.Assembly info = typeof(System.Environment).Assembly; 

Type t = info.GetType("System.Environment"); 
MethodInfo m = t.GetMethod("GetFolderPath"); 

object result = m.Invoke(null, arguments); 
3

Trước tiên, bạn cần phải nhận được Type (bằng cách lặp lại trên lắp ráp sử dụng phản ánh)

thấy liên kết này để biết chi tiết: http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

hoặc sử dụng

Assembly.GetType 

một khi bạn có loại trong tay bạn có thể lặp qua các thành viên bằng cách sử dụng phản chiếu hoặc

MethodInfo method = typeof(MyClass).GetMethod("MyMethod"); 

thì bạn có thể sử dụng MethodInfo.Invoke và chuyển đối số để gọi phương thức khi bạn muốn gọi.

+0

** MyClass ** là công khai, không phải cách cho *** 'lớp tĩnh bên trong' ***? – Kiquenet

1

Những gì bạn đang làm ở đây phản ánh trên loại có tên Environment và sử dụng các phương pháp GetProperyGetGetMethod để có được phương thức của thuộc tính Environment.CurrentDirectory như vậy;

var getMethod = typeof(Environment).GetProperty("CurentDirectory", BindingFlags.Public | BindingFlags.Static).GetGetMethod(); 
var currentDirectory = (string)getMethod.Invoke(null, null); 

Gọi phương thức nhận của thuộc tính trả về giá trị của nó và tương đương với;

var value = Environment.CurrentDirectory; 
Các vấn đề liên quan