2010-09-05 36 views
5

Có thể thay đổi phần thân của phương thức trong khi chạy không?C# Phản ánh, thay đổi thân của phương thức

class Person 
{ 
    public void DoSth() 
    { Console.WriteLine("Hello!"); } 
} 

Tôi muốn có trường nhập đơn giản (như hộp văn bản) nơi tôi có thể viết mã nguồn của phương thức trong khi chạy.

Các hộp có thể chứa dữ liệu như:

for (int i = 0; i < 5; i++) 
    Console.WriteLine(i); 

cần được excecuted khi

new Person().DoSth() 

được gọi.

(hoặc như thế nào) điều này có thể xảy ra trong C# (sử dụng Reflection)?
Cảm ơn sự giúp đỡ của bạn trước.

CHỈNH SỬA:
Nếu không thể nêu trên, bạn có thể tạo phương thức mới trong khi chạy và gọi không?

+1

Đây không phải là sự phản chiếu, đó là tạo mã. Nó cũng không phải là một ý tưởng tuyệt vời. –

Trả lời

5

Reflection.Emit là một cách để tạo ra IL khi chạy ... http://msdn.microsoft.com/en-us/library/8ffc3x75(v=VS.90).aspx

Lightweight sinh mã là khác ... http://blogs.msdn.com/b/joelpob/archive/2004/03/31/105282.aspx

Tuy nhiên, không mất C# và biên dịch nó. Đối với điều này, bạn rất có thể cần phải gọi trình biên dịch C#.

Trường hợp sử dụng của bạn là gì (tại sao bạn muốn thực hiện việc này)? Có những cân nhắc về bảo mật với mã đang chạy trong miền ứng dụng của bạn, vì vậy bạn cần phải tìm ra cách bạn sẽ giải quyết vấn đề này.

+0

Tôi muốn tạo một môi trường phát triển nhỏ cho máy phát quét. Các genertor sản xuất một phương pháp C#, mà nên được excecuted bất cứ khi nào một mã thông báo được tìm thấy. Các bảng chuyển đổi có thể thực sự được nạp trong thời gian chạy (các tệp được lưu trữ trong tệp). Tôi chỉ đơn giản là không muốn biên dịch lại chương trình quét lỗ trong khi phát triển đặc tả máy quét. – raisyn

2

Bạn không thể thay đổi thân phương pháp khi chạy. Không có gì cho phép bạn làm điều này. Điều tốt nhất bạn có thể làm là phát ra một phương pháp mới.

+0

Ít nhất là không có 'động' ... –

+1

@Steven, làm thế nào để' năng động' cho phép sửa đổi một kiểu hiện có? –

+0

Bạn có thể sử dụng 'ExpandoObject' được tham chiếu qua' dynamic', cho phép bạn chỉ định một đại biểu để nó có thể được gọi với cú pháp phương thức. –

Các vấn đề liên quan