Dự kiến, bạn cũng có thể đạt được qua hệ này, ông sử dụng của những thứ trong không gian tên System.Reflection.Emit và tôi tin rằng nó có thể cung cấp việc thực hiện một phương thức thông qua việc sử dụng các cây biểu thức LINQ. Đó là loại gọn gàng:
var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("TestAssembly"), AssemblyBuilderAccess.RunAndSave);
var mod = assembly.DefineDynamicModule("TestModule");
var type = mod.DefineType("TestType");
var method = type.DefineMethod("Increment", MethodAttributes.Public, typeof(int), Type.EmptyTypes);
Expression<Func<int, int>> inc = (a) => a + 1; // this is cool
inc.CompileToMethod(method);
Nó có thể hơi khó khăn lúc đầu, nhưng nó thực sự tuyệt vời, và bạn để trình biên dịch tạo ra nội dung khó, triển khai phương pháp. Nhưng bạn không thể thực sự tạo ra các lĩnh vực như thế này, đó sẽ đòi hỏi một số IL. Đó là niềm vui tuyệt vời nhưng thực sự làm việc tẻ nhạt.
KHUYẾN CÁO:
Tôi chưa thử chạy mã trên. Nhưng tôi biết nó giống như vậy, đã lâu rồi tôi mới làm như thế.
Nguồn
2010-06-11 22:16:21
Bạn có thể cho chúng tôi biết bạn đã làm gì trong bài tập về nhà này cho đến nay không? – 48klocs
Trông rất giống với câu hỏi mã-nó-cho-tôi ... – Dykam
Tôi muốn đặt "đây không phải là bài tập về nhà", nhưng tôi nghĩ các bạn sẽ cho tôi lợi ích của sự nghi ngờ. Tôi đã 27 tuổi rồi. Nó không phải là "mã nó cho tôi" câu hỏi. Vấn đề tôi đối mặt thực sự lớn hơn nhiều, nhưng tôi giảm vấn đề xuống câu hỏi đơn giản ở trên. – zaidwaqi