2010-02-11 27 views
6

Nếu nhiều thuộc tính được áp dụng cho thành viên, ví dụ:Thứ tự các thuộc tính có bất kỳ đảm bảo nào không?

[Foo] 
[Bar] 
void Baz() { ... } 

Sau đó, bất kỳ đảm bảo thực hiện bởi các chi tiết kỹ thuật CLR/NET như những gì thứ tự mà chúng sẽ được lấy ra trong khi lấy ra bởi phản xạ (ví dụ Attribute.GetCustomAttributes)? Tài liệu cho các phương thức này không làm cho nó rõ ràng, và trong khi nó có vẻ là trường hợp chúng được trả về theo thứ tự chúng được áp dụng, tôi không muốn dựa vào hành vi không có giấy tờ vì nó chỉ yêu cầu sự cố. Đối với lý do tại sao điều này có thể là quan trọng, hãy tưởng tượng các thuộc tính được sử dụng để chỉ ra rằng phương pháp nên có một loạt các interceptor, mà nên chạy theo một thứ tự cụ thể.

Trả lời

11

Không có từ 17.2 Attribute specification không có vẻ như vậy.

Thứ tự mà các thuộc tính là quy định trong một danh sách như vậy, và thứ tự mà phần gắn liền với đơn vị cùng một chương trình được sắp xếp, là không đáng kể. Ví dụ: thông số thuộc tính thuộc tính [A] [B], [B] [A], [A, B] và [B, A] là tương đương.

+0

Có vẻ khá kết luận - cảm ơn. Đó là những gì tôi mong đợi để thành thật. –

3

Dựa vào thứ tự cho loại điều này thường là một ý tưởng tồi. Nếu thứ tự quan trọng, tôi sẽ cung cấp cho thuộc tính một thuộc tính Ưu tiên để nó có thể được thực hiện rất rõ ràng.

Tôi không biết bất kỳ đảm bảo nào sẽ được truy lục theo thứ tự ban đầu.

+0

Có, tôi đồng ý. Tôi đã cho họ một tài sản 'AspectOrder' để kiểm soát điều này, nhưng chỉ tò mò về việc liệu nó có cần thiết để đảm bảo việc đặt hàng trái ngược với ý định hay không. –

1

imo Thuộc tính không được có thứ tự vì chúng không có cấu trúc điều khiển luồng.

Tôi đoán bạn có thể thêm thuộc tính ưu tiên cho thuộc tính và sử dụng thuộc tính đó để xác định thứ tự chạy?

+1

gargh - bị đánh đập bởi Skeet, tại sao tôi lại bận tâm? ;) – RSlaughter

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