2010-02-22 28 views

Trả lời

8

Thuộc tính được xuất dưới dạng siêu dữ liệu cho bản lắp ráp tại thời gian biên dịch. Dữ liệu meta này sau đó được sử dụng khi chạy qua phản xạ - ví dụ sử dụng GetCustomAttributes().

Một số thuộc tính cũng được trình biên dịch sử dụng tại thời gian biên dịch. Ví dụ trình biên dịch xem xét AttributeUsageAttribute để xác định xem một thuộc tính có thể được sử dụng cho một đối tượng cụ thể hay không.

+1

Trình biên dịch cũng sử dụng thuộc tính ObsoleteAttribute tại thời gian biên dịch. – plinth

1

Thuộc tính được biên dịch thành mã tại thời gian biên dịch, nhưng chúng thường được sử dụng trong thời gian chạy làm trình kích hoạt để thực hiện các việc khác nhau.

0

Trình biên dịch thêm dữ liệu được gọi là siêu dữ liệu vào đối tượng được trang trí bằng thuộc tính. Siêu dữ liệu này, dù được tạo thông qua thuộc tính hay cách khác, đều có thể truy cập được tại thời gian chạy qua số Reflection. Vì vậy, bạn có thể trang trí với các thuộc tính và sau đó đọc các chi tiết khi chương trình đang chạy. Tuy nhiên, để nói rằng siêu dữ liệu được "sử dụng" tại thời gian biên dịch không hoàn toàn chính xác, vì trình biên dịch không quan tâm đến siêu dữ liệu nào.

+1

-1: Trong một số trường hợp, thuộc tính ảnh hưởng đến việc biên dịch theo các cách có ý nghĩa. Ví dụ: Thuộc tính có điều kiện chủ yếu để sử dụng trong thời gian biên dịch và có thể kích hoạt lỗi trình biên dịch nếu sử dụng không chính xác. – Brian

+0

Vâng, bạn đúng ... Tôi quên mất những trường hợp đó ... Quá cũ là khác. –

12

Hầu hết chỉ được sử dụng khi chạy. Một số lượng rất hạn chế được sử dụng bởi trình biên dịch, bao gồm:

  • [Conditional(...)] - bỏ qua các cuộc gọi phương pháp mỗi xây dựng những biểu tượng
  • [Obsolete(...)] - phát ra một cảnh báo/báo lỗi như xây dựng sản lượng
  • [Serializable] - được viết như một lá cờ CLI
  • [Extension] - được sử dụng cho phương pháp khuyến nông
  • [AttributeUsage] - ảnh hưởng đến cách các thuộc tính được áp dụng
  • -

Có một loạt các thứ như [AssemblyVersion], [AssemblyFileVersion] v.v. được trình biên dịch sử dụng khi tạo tệp lắp ráp và những thứ như [InternalsVisibleTo] ảnh hưởng đến khả năng truy cập.

Ngoài ra, các công cụ như PostSharp thực hiện các bước bổ sung sau khi biên dịch dựa trên các thuộc tính.

Có một số thuộc tính khác mà trình biên dịch có thể thêm vào các kiểu/phương thức đã tạo (đối với các kiểu/kiểu anon, khối lặp, v.v.).

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