2009-05-25 40 views
9

thể Duplicates:
When do you use reflection? Patterns/anti-patterns
What exactly is Reflection and when is it a good approach?Sử dụng Reflection trong .NET là gì?

nhu cầu phản ánh trong .NET là gì? Các tình huống có ích gì?

+0

Có ích khi không có công trình nào khác hoạt động. Giống như javascript trong thế giới web. :) –

+2

Nhân bản: http://stackoverflow.com/questions/429962/when-do-you-use-reflection-patterns-anti-patterns ... ... ... ... Đồng thời : http://stackoverflow.com/questions/864332/what-exactly-is-reflection-and-when-is-it-a-good-approach – Shog9

Trả lời

10

Giả sử bạn đang viết một thói quen tuần tự hóa cơ bản, sẽ tuần tự hóa bất kỳ đối tượng nào thành XML. Làm thế nào bạn sẽ làm cho nó đủ chung chung, để nó có thể làm việc cho bất kỳ đối tượng? Nếu bạn có một lớp mà bạn biết tất cả các thuộc tính, thì bạn có thể dễ dàng viết một hàm "ToXml()", nơi bạn viết thủ công tất cả các thuộc tính cho XML. Điều gì nếu bạn muốn mở rộng này mặc dù đối tượng BẤT CỨ? Trong trường hợp đó, bạn cần phản ánh các thuộc tính trong thời gian chạy và ghi chúng ra XML.

Có nhiều công dụng hơn cho nó, đó là cách đầu tiên bạn nghĩ đến.

3

Tôi nghĩ rằng Wikipedia article on reflection là khá tốt:

Trong khoa học máy tính, phản ánh là quá trình mà theo đó một chương trình máy tính có thể quan sát và sửa đổi cấu trúc và hành vi của chính mình. Mô hình lập trình được điều khiển bởi sự phản ánh được gọi là lập trình phản chiếu . Nó là một loại cụ thể của metaprogramming.

Trong nhiều kiến ​​trúc máy tính, hướng dẫn chương trình được lưu trữ như dữ liệu - do đó sự phân biệt giữa hướng dẫn và dữ liệu chỉ đơn thuần là một vấn đề về cách thức thông tin là xử lý bằng máy tính và ngôn ngữ lập trình. Thông thường, 'hướng dẫn' được 'thực thi' và 'dữ liệu' được 'xử lý'; tuy nhiên, trong một số ngôn ngữ, chương trình cũng có thể coi hướng dẫn dưới dạng dữ liệu và do đó, hãy thực hiện các sửa đổi sửa đổi. Reflection là nhất thường được sử dụng trong ngôn ngữ lập trình máy ảo cấp cao như Smalltalk và ngôn ngữ kịch bản, và ít thường được sử dụng trong ràng gõ và/hoặc tĩnh đánh máy lập trình ngôn ngữ như Java và C.

Phản ánh cho phép bạn nhận thông tin về loại đối tượng tại thời gian thực hiện. Điều này có thể hữu ích trong nhiều tình huống bao gồm việc tuần tự hóa (và giới hạn) và ánh xạ đối tượng-quan hệ.

+0

Nhưng không giới hạn? – jedmao

1

Reflection được sử dụng khi bạn không biết tại thời gian biên dịch thời gian mà đối tượng của bạn là gì hay hành động để làm hoặc vào những gì bất động sản ...

Bạn có thể sử dụng phản ánh để tìm tất cả đối tượng của loại X trong một được đưa ra, hoặc gọi một số phương thức bằng tên của nó (được lấy từ db, hoặc tệp cấu hình ...), cùng một thứ để thiết lập thuộc tính .... những thứ như vậy (đây là trường hợp chúng tôi sử dụng nó)

4

Có nhiều công dụng để phản ánh. Các .NET Framework sử dụng nó cho serialization và cho data binding, nó cũng có thể được sử dụng để tạo ra các công cụ kiểm tra mã của bạn như Reflector, FxCop và NUnit cũng như khung cơ sở dữ liệu ORM. Nó có nhiều cách sử dụng khác nhau trong thời gian chạy từ việc ghi lại những thứ cụ thể về một đối tượng đến Dependency Injection Frameworks. Nó cũng có thể được sử dụng để tự động thực hiện các phương thức hoặc thiết lập các thuộc tính trong thời gian chạy như được thực hiện với các thuộc tính tùy chỉnh. Nó cũng có thể được sử dụng trong lập trình cấp cao hơn như metaprogramming và mã tự sửa đổi.

3

Nó được sử dụng cho lập trình meta, đó là khi bạn đang mã hóa về mã riêng của mình chứ không phải là vấn đề kinh doanh thông thường

2

Nó cũng có thể rất hữu ích khi kiểm tra ứng dụng của bạn, ví dụ kiểm tra đơn vị hoặc các loại khung kiểm tra khác. Bằng cách sử dụng sự phản chiếu, bạn có thể tạo một tệp xml (hoặc một số tệp dữ liệu đầu vào khác ở định dạng phù hợp) và chương trình của bạn phân tích nó và gọi các phương thức được định nghĩa trong tệp. Đây là cách hoạt động của Fitnesse.

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