2009-09-20 57 views

Trả lời

7

Vâng, nó sẽ cần phải là virtual để có thể ghi đè lên nó (bằng cách viết một loại động kế thừa từ lớp), và bạn không thể có một private virtual (nó không có ý nghĩa). Bạn có lẽ có thể ghi đè lên một số internal virtual, nhưng tôi nghi ngờ thậm chí điều này có thể gây ra các vấn đề bảo mật. Vì vậy, cuối cùng, tôi muốn nói không.

1

Không phải bằng cách sử dụng Phản chiếu. Bạn cần sử dụng một số loại AOP.

5

Không chỉ bằng cách sử dụng Phản chiếu. Có lẽ điều tốt nhất bạn có thể làm là sử dụng Reflection, kết hợp với Reflection.Emit hoặc CodeDom để nhân bản lớp đó thành một không gian tên mới. Khi bạn đi qua phương pháp riêng tư mà bạn muốn thay thế, bạn không sao chép nó, bạn phát ra sự thay thế của mình.

Tuy nhiên, có rất nhiều kỹ thuật mà nhà phát triển có thể sử dụng khiến kỹ thuật này khó khăn hơn nhiều. Phá vỡ việc thực hiện của lớp vào nhiều lớp học tư nhân hoặc nội bộ là một trong những như vậy.

Lưu ý: sử dụng CodeDom bạn phải tạo biểu đồ trong bộ nhớ, biên dịch nó và sau đó tải cụm kết quả.

Đây có thể là một vấn đề lớn hơn rất nhiều so với giá trị.

Cách khác để thực hiện việc này là sử dụng Reflector để tháo rời lớp học, lấy mã và tạo lớp của riêng bạn từ lớp đó bằng phương pháp thay thế. Một lần nữa có những rào cản kỹ thuật và pháp lý đáng kể để vượt qua. Bạn có thể học được rất nhiều từ mã đã được tháo rời.

+0

... hoặc bạn không thể học được gì, nếu mã bị làm mờ. –

+2

của bạn có thể tìm hiểu rằng một số mã được obfuscated :-) –

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