Hầu hết mọi người nhấn mạnh vào việc cố gắng lập trình meta từ bên trong ngôn ngữ yêu thích của họ. Điều đó không hiệu quả nếu ngôn ngữ không hỗ trợ lập trình meta tốt; câu trả lời khác đã quan sát thấy rằng C# không.
Cách xung quanh việc này là thực hiện lập trình meta từ bên ngoài ngôn ngữ, sử dụng program transformation tools. Các công cụ như vậy có thể phân tích cú pháp mã nguồn, và thực hiện các phép biến đổi tùy ý trên nó (đó là những gì metaprogramming làm anyway) và sau đó nhổ ra chương trình sửa đổi.
Nếu bạn có một hệ thống chuyển đổi chương trình mục đích chung, có thể phân tích ngôn ngữ tùy ý, bạn có thể thực hiện lập trình meta trên/với bất kỳ ngôn ngữ nào bạn muốn. Xem DMS Software Reengineering Toolkit của chúng tôi cho một công cụ như vậy, có các giao diện người dùng mạnh mẽ cho C, C++, Java, C#, COBOL, PHP và một số ngôn ngữ lập trình khác và đã được sử dụng để lập trình meta trên tất cả các công cụ này.D2 thành công vì nó cung cấp phương pháp thường xuyên và cơ sở hạ tầng hỗ trợ để truy cập hoàn toàn vào cấu trúc chương trình như AST, và trong hầu hết các trường hợp dữ liệu bổ sung như bảng biểu tượng, thông tin kiểu, kiểm soát và phân tích luồng dữ liệu. thao tác chương trình.
EDIT (để trả lời nhận xét): Người dùng có thể áp dụng DMS để triển khai nhiệm vụ của OP trên C#.
Nguồn
2010-02-26 18:19:38
Mặc dù không thể thực hiện được bằng C#, nhưng có thể có các ngôn ngữ .NET được chọn mạnh như [Boo] (http://boo.codehaus.org/) và [Nemerle] (http://nemerle.org/Main_Page)). –
Bạn có thể đọc Metaprogramming trong .NET http://www.manning.com/hazzard của Kevin Hazzard và Jason Bock –
@ Jordão: Boo là một ngôn ngữ rất khác và Nemerle ít nhiều chết vì Jetbrains đã thuê bộ não. Có lẽ Script.NET đáng được đề cập đến. –