2010-01-31 53 views
10

Sử dụng System.Reflection, tôi có thể nhận tất cả các phương thức từ một lớp cụ thểLàm thế nào tôi có thể nhận được tất cả các tham chiếu với Reflection + C#

Tôi cần biết tham chiếu đến các phương pháp này là gì. Ví dụ: trong Visual Studio, nếu bạn muốn tham khảo các đối tượng cụ thể

  • nhấp chuột phải vào đối tượng và chọn "Tìm Mọi Tham khảo"
  • Visual Studio hiển thị các tài liệu tham khảo của đối tượng được chọn này

Tôi muốn làm như vậy, nhưng từ mã với sự phản ánh hoặc một cách khác.

Tôi có thể làm điều này không?

+4

** Tại sao ** mọi người upvoting câu hỏi này? Nó đầy lỗi chính tả và ngữ pháp, và nó yêu cầu làm điều gì đó tốt nhất hầu như không có mục đích thực tế (trừ khi bạn đang cố gắng phát minh lại Reflector) và rất có thể là dẫn đến bài báo DailyWTF của riêng mình trong tương lai xa. – Aaronaught

+0

@Aaronaught Up-VotdEd chỉ dành cho ryou thôi :) –

+1

@Aaronaught (và những người bình chọn bình luận của mình) xấu "engrish" làm phiền tôi quá, nhưng qua nhiều năm của tôi treo ra tại stack trao đổi tôi đã phát hiện ra rằng thích hợp điều cần làm trong những trường hợp này được coi là chỉnh sửa câu hỏi để sửa lỗi "engrish" thay vì phàn nàn. –

Trả lời

5

Điều này không thể thực hiện với sự phản ánh. Reflection là một công cụ để kiểm tra siêu dữ liệu và hội đồng. Để tìm tất cả các tham chiếu đến một phương thức/kiểu đã cho, bạn cần kiểm tra IL cơ bản của một assembly. Sự phản chiếu chỉ có khả năng IL rất hạn chế (đơn giản là trả về nó như là một mảng byte). Bạn sẽ cần phải tùy chỉnh kiểm tra luồng byte đó để thu thập bất kỳ bối cảnh nào về những gì nó tham chiếu.

+1

bạn có biết cách tôi có thể làm điều đó không? ... hoặc có một số ví dụ về mã? ... Cảm ơn. –

+1

Rất tuyệt, đó là một "plz send teh codez". – Aaronaught

2

Đó không phải là thứ có thể truy cập trực tiếp qua phản chiếu thời gian chạy trên một lớp cụ thể. Bạn sẽ phải xem xét toàn bộ cây mã nguồn hoặc kết quả IL để xác định xem có bất kỳ tham chiếu nào đến một phương thức cụ thể có cùng tên hay không là quá tải và chữ ký đúng cho phương thức bạn đang cố gắng tìm tham chiếu đến.

Hơn nữa, nếu không có thêm công việc, bạn sẽ không bao giờ tìm thấy các tham chiếu đến một phương thức cụ thể mà chính chúng được gọi thông qua sự phản chiếu. (Đây là một trong những lý do tại sao obfuscating rằng loại mã là thách thức và dễ bị lỗi.)

0

Microsoft phát hành Common Compiler Infrastructure dự án theo giấy phép mã nguồn mở. Các dự án này nhằm hỗ trợ nhiều tính năng liên quan đến trình biên dịch, bao gồm phân tích lắp ráp như bạn đang đề cập đến. Tài liệu giới hạn, vì vậy bạn cần hiểu rõ về ECMA-335 (Cơ sở hạ tầng ngôn ngữ chung) để sử dụng hiệu quả nó cho mục đích của bạn.

Không có mẫu mã ma thuật nào ở đây. Đây là một nhiệm vụ lớn và khá phức tạp, nơi bạn sẽ tự mình làm theo cách của mình.

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