2013-07-30 32 views
13

Tôi đã làm việc với Reflections và muốn nhận tất cả thuộc tính được khai báo cho thuộc tính. Có hai thuộc tính trong số PropertInfo lớp là CustomAttributesAttributes.Thuộc tính so với CustomAttributes trong PropertyInfo

Theo MSDN, họ được giải thích như sau:

Attributes:

Khách sạn này đại diện cho các thuộc tính liên quan đến một thành viên. Tất cả các thành viên có một tập hợp các thuộc tính được xác định liên quan đến loại thành viên cụ thể. Thuộc tính thuộc tính cho phép người dùng biết nếu thuộc tính này là thuộc tính mặc định, thuộc tính SpecialName và do đó, bật.

Lưu ý: Mẫu mã được cung cấp trong trang PropertyInfo.Attributes thậm chí không hoạt động.

Tuỳ thuộc tính:

Một mảng có chứa tất cả các thuộc tính tùy chỉnh áp dụng cho thành viên này, hoặc một mảng với zero yếu tố nếu không có thuộc tính được định nghĩa.

Tuy nhiên, khi tôi chạy mã này cho họ, Attributes không trả về sốtrả về Required.

void Main() 
{ 
    var attributes = typeof(Myproperty).GetProperty("Caption").CustomAttributes; 
    //var attributes = typeof(Myproperty).GetProperty("Caption").Attributes; 
    attributes.Dump(); //Dump is a LinqPad method which dumps everything to the outpu window 
} 

public class Myproperty 
{ 
    private string caption = "Default caption"; 

    [Required] 
    public string Caption 
    { 
     get{return caption;} 
     set {if(caption!=value) {caption = value;} 
     } 
    } 
} 
+0

Về cơ bản, chúng có ý nghĩa hơi khác về từ "thuộc tính" tại đây. Có vẻ như bạn muốn CustomAttributes. –

+0

Tôi đã tìm ra những gì tôi muốn là 'CustomAttributes' nhưng bạn có thể giải thích sự khác biệt là gì không? IMO có vẻ như nó không làm những gì tên của nó ngụ ý. – Tarik

+1

Về cơ bản, hãy xem câu trả lời từ Hans. Chúng rất khác nhau. Nhìn vào MethodInfo.Attributes cho một ví dụ có thể có ý nghĩa hơn với bạn - nó giống như các công cụ sửa đổi có thể được áp dụng cho một thuộc tính/phương thức/v.v. –

Trả lời

16

PropertyInfo.Attributes không liên quan gì đến lớp Thuộc tính. Kiểm tra các PropertyAttributes enumeration cho các giá trị bạn có thể gặp phải. Đây là những chi tiết thực hiện CLR không có kết nối rõ ràng với mã C#. Vâng, đó là một lựa chọn đặt tên không may.

Để tìm các thuộc tính như thuộc tính [Bắt buộc] của bạn, bạn phải sử dụng thuộc tính CustomAttributes.

+0

Sau đó có lẽ tôi nên dành nhiều thời gian hơn với ILSpy ... – Tarik

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