Trong .Net, là tính năng thuộc tính được sử dụng tại thời gian biên dịch hay thời gian chạy hoặc cả hai? Bạn có thể cho tôi một số ví dụ?Tính năng thuộc tính .Net có được sử dụng tại thời gian biên dịch hay thời gian chạy hoặc cả hai?
Trả lời
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.
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.
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: 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
Vâng, bạn đúng ... Tôi quên mất những trường hợp đó ... Quá cũ là khác. –
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.).
- 1. Giá trị khởi tạo có được tính tại thời gian biên dịch hay thời gian chạy không?
- 2. Thuộc tính Lỗi thời chỉ được kiểm tra tại thời gian biên dịch?
- 3. Chạy PublicResXFileCodeGenerator tại thời gian biên dịch
- 4. Cách tính thời gian biên dịch gcc?
- 5. Có thể truy vấn thuộc tính tùy chỉnh trong C# trong thời gian biên dịch (không phải thời gian chạy)
- 6. Tự động thêm thuộc tính C# tại thời gian chạy
- 7. Là thời gian chạy generics hay biên dịch đa hình thời gian?
- 8. Thay đổi thuộc tính log4j tại thời gian chạy
- 9. Bản đồ hai loại tại thời gian biên dịch
- 10. sizeof toán tử thời gian biên dịch hoặc thời gian chạy
- 11. C: Thông tin trình biên dịch tại thời gian chạy
- 12. Thuộc tính động Objective-C trong thời gian chạy?
- 13. var thời gian chạy từ khóa hoặc thời gian biên dịch?
- 14. Tại sao Dart có biên dịch hằng số thời gian?
- 15. Trình biên dịch Java tại thời gian chạy
- 16. Cách tính toán thời gian chạy từ trạng thái và thời gian sử dụng python
- 17. java cập nhật các thuộc tính tệp thời gian chạy
- 18. Tôi có thể tính toán pow (10, x) tại thời gian biên dịch trong c?
- 19. Run thời gian VS Compile thời gian (NET)
- 20. ClassNotFoundException trong thời gian chạy nhưng ứng dụng biên dịch
- 21. Hằng số thời gian biên dịch Flex - Dấu thời gian
- 22. offsetof tại thời gian biên dịch
- 23. Tại sao sử dụng performSelector: withObject: withObject tại thời gian chạy nếu bạn biết cả bộ chọn và đối số của nó tại thời gian biên dịch?
- 24. Lặp qua tất cả các thuộc tính đối tượng tại thời gian chạy
- 25. Tính thời gian giữa hai lần Android
- 26. Tính toán thời gian giữa hai ngày?
- 27. C# Loại đúc tại thời gian chạy Sử dụng Reflection
- 28. Quyết định các thuộc tính nào được tuần tự hóa tại thời gian chạy
- 29. Java - Thuộc tính: Thêm khóa mới vào tệp thuộc tính trong thời gian chạy?
- 30. Tính toán giai thừa của một số nguyên nhỏ tại thời gian biên dịch
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