Lập trình meta có tất cả các ưu điểm của việc tạo mã-thời gian xây dựng, nhưng không có bước mã bổ sung. Điều này là rất phổ biến trong mã thư viện, chẳng hạn như ORM, serializers, một số loại AOP, DI/IoC container, v.v.
- + tránh sự cần thiết cho các bước xây dựng thêm hoặc viết mã trần tục
- + mã như vậy có thể xử lý những gì thực là trường hợp tại thời gian chạy, thay vì phải xử lý bất kỳ hiếm edge-ca hoặc nhiều giấy gói xung quanh giấy gói (trang trí hoa văn)
- + cho phép codegen trong các tình huống nơi mà các siêu dữ liệu chỉ được biết đến trong thời gian chạy
- + runtime IL có thể truy cập nhiều hơn đến lĩnh vực tư nhân vv, nhờ vào cách
DynamicMethod
thể được kết hợp với một loại; mã được tạo đầy đủ (dll) sẽ yêu cầu [InternalsVisibleTo]
hoặc tương tự, có thể là không thể
- - không phải tất cả hệ thống hỗ trợ thời gian chạy mã-gen; nó bị vô hiệu hóa trên một số thiết lập máy chủ, khung nhỏ gọn, iPhone, v.v.
- - đó là lỗi xấu xí để thực hiện. Bất kể bạn làm như thế nào, đây là không phải mã bình thường.
- - nó cần một sự hiểu biết thực sự tốt về cách điều thực sự làm việc dưới tấm chăn
- + nếu các lực lượng bạn để có được một sự hiểu biết thực sự tốt về cách điều thực sự làm việc dưới tấm chăn
Tôi hiện lại - Viết một thư viện hiện có để sử dụng thời gian chạy IL; nó rất bổ ích và tôi hài lòng với nó; nhưng nó không giống như bất cứ điều gì Tôi đã viết trước đây.
Nguồn
2010-04-17 20:08:54
ngoài câu hỏi này? Bạn có thể lưu mã của bạn đã được tạo ra tại thời gian chạy bằng cách sử dụng Reflection đến một hội đồng. Bằng cách này bạn không phải tạo lại nó? –
Có, trên thực tế, liên kết bạn cung cấp đã lưu mã được tạo. –
lol. Buồn cười phần cuối cùng của đoạn mã đó. Cho thấy tôi đã chú ý đến bao nhiêu. Xin lỗi vì điều đó. –