Có thể sử dụng Generics với Máy phát điện IL không?generics với IL?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
Có thể sử dụng Generics với Máy phát điện IL không?generics với IL?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
Có, có thể, nhưng không phải với lớp DynamicMethod
. Nếu bạn bị giới hạn sử dụng lớp này, bạn sẽ không may mắn. Thay vào đó, nếu bạn có thể sử dụng đối tượng MethodBuilder
, hãy đọc tiếp.
Phát cơ thể của một phương pháp chung là, với hầu hết các ý định và mục đích, không khác với việc phát ra các phương pháp khác, ngoại trừ việc bạn có thể tạo biến cục bộ của các kiểu chung. Dưới đây là một ví dụ về việc tạo ra một phương pháp chung sử dụng MethodBuilder
với T luận chung và tạo ra một địa phương của loại T:
MethodBuilder method;
//... Leaving out code to create MethodBuilder and store in method
var genericParameters = method.DefineGenericParameters(new[] { "T" });
var il = method.GetILGenerator();
LocalBuilder genericLocal = il.DeclareLocal(genericParameters[0]);
Để phát ra một lời kêu gọi rằng phương pháp chung từ một phương pháp khác, sử dụng mã này. Giả sử method
là một MethodInfo
hay MethodBuilder
đối tượng mô tả một định nghĩa phương pháp chung chung, bạn có thể phát ra một lời kêu gọi phương pháp đó với tham số chung đơn int
như sau:
il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));
Thay vì gọi 'GetGenericArguments()', bạn có thể sử dụng mảng được trả về bởi 'DefineGenericParameters()'. – svick
Cảm ơn, tôi không biết điều đó. Bây giờ nó đã được sửa. – aboveyou00
Cảm ơn @svick & aboveyouOO. Tôi đọc trên SO rằng nó không phải là có thể, và suy nghĩ để hỏi anyway - Tôi hy vọng rằng thông tin đó có thể đã được cho một phiên bản trước của. – sgtz
thể trùng lặp của [DynamicMethod với các tham số kiểu chung chung] (http : //stackoverflow.com/questions/788618/dynamicmethod-with-generic-type-parameters) –
Nó không rõ ràng từ câu hỏi của bạn: bạn có muốn tạo ra một phương thức chung chung hoặc chỉ sử dụng một số loại chung chung (hoặc phương pháp) bên trong nó? – svick
@svick: Tôi muốn tạo động một phương pháp chung. – sgtz