2009-10-08 21 views
7

Trong khi chạy qua Reflector để tìm nguyên nhân gốc của lỗi trong ứng dụng WPF, tôi tình cờ gặp một thuộc tính nội bộ FriendAccessAllowedAttribute được rải rác trên nhiều lớp khác nhau, thành viên, v.v. Tuy nhiên, tôi ' m không thể xác định chính xác những gì sử dụng thuộc tính này (nếu có). Tôi đoán đây là một phần của cơ sở hạ tầng C++/CLI, nhưng tìm kiếm MSDN, thông số C++/CLI và thông số CLI không tiết lộ gì cả. Có ai biết về những gì nó được sử dụng cho?Sử dụng FriendAccessAllowedAttribute bên trong WPF

+0

Cũng có một số trường/phương thức trên 'System.Threading.Tasks.Task' với thuộc tính này. –

Trả lời

6

Khi tôi nhớ lại, đó là một cách để kiểm soát sự phụ thuộc giữa các hội đồng người bạn trong Khung. Về cơ bản, khi bạn cấp cho assembly A "friend" truy cập vào assembly B, bạn không muốn tất cả thành viên nội bộ của B được cung cấp cho A, vì sau đó bất kỳ thay đổi nào đối với thành viên đó sẽ có khả năng phá vỡ (sẽ tăng diện tích bề mặt an ninh cần được xem xét). Khá chắc chắn thuộc tính này được vinh danh trong Silverlight, không chắc chắn về toàn bộ khung công tác.

+0

Vâng tôi đã dành một thời gian đào trong phản xạ, nhưng không nghĩ để kiểm tra Silverlight. – user7116

1

Điều thú vị là thuộc tính đó được quy cho chính nó!

decompiled từ C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll, phiên bản 4.0:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | 
       AttributeTargets.Constructor | AttributeTargets.Method | 
       AttributeTargets.Property | AttributeTargets.Field | 
       AttributeTargets.Event | AttributeTargets.Interface, 
       AllowMultiple = false, Inherited = false)] 
[FriendAccessAllowed] 
internal sealed class FriendAccessAllowedAttribute : Attribute 
{ 
} 

Vì vậy, tôi đoán nó chỉ có thể được sử dụng bởi hội chọn được giao bạn bè của mscorlib.


EDITMicrosoft's reference source for the attribute thể hiện định nghĩa là bên cạnh InternalsVisibleToAttribute và bao gồm các chuỗi bình luận:

Nếu AllInternalsVisible là không đúng đối với một hội bạn bè, thuộc tính FriendAccessAllowed chỉ mà internals được chia sẻ với người bạn đó hội,, tổ hợp.

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