2010-09-09 39 views

Trả lời

4

Thuộc tính được sử dụng cho Mô hình lập trình khai báo.

Thuộc tính không ép buộc bất kỳ chức năng nào (trừ khi ra khỏi hộp). Đối với các thuộc tính out-of the box, hãy đọc tài liệu trên msdn. Đối với các thuộc tính của riêng bạn, bạn cần phải viết mã trên những gì nếu một lớp/phương thức, vv có một thuộc tính.

Tôi không nghĩ rằng thuộc tính được thêm động. Tuy nhiên, chúng được đọc tự động. Chúng là siêu dữ liệu, được thêm vào lúc biên dịch. Kiểm tra điều này: Can attributes be added dynamically in C#?

Thuộc tính tùy chỉnh là thuộc tính bạn tạo và gắn thẻ các lớp học của mình với. Để tạo một thuộc tính bạn cần tạo một lớp (cho thuộc tính) thừa kế từ System.Attribute. Kiểm tra điều này: http://msdn.microsoft.com/en-us/library/sw480ze8.aspx

9
  1. Thuộc tính có nghĩa là thêm thông tin bổ sung về một lớp, chức năng, vv. Các thuộc tính khác được xem bởi các thư viện trong khi chương trình đang chạy.

  2. Bắt đầu bằng cách xem tài liệu về chức năng bạn muốn. Nó sẽ liệt kê những thuộc tính nào là cần thiết.

  3. Không. Thuộc tính chỉ có thể được áp dụng trước khi mã được biên dịch.

  4. Đó chỉ là thuộc tính bạn đã tạo cho mình thay vì thuộc tính đi kèm với .NET.

1

Thuộc tính được sử dụng để cung cấp dữ liệu meta về lớp học và phương pháp, thuộc tính và sự kiện trong lớp học của bạn.

Một số thuộc tính phổ biến nhất được sử dụng để thông báo cho Nhà thiết kế thông tin về các thuộc tính trong các lớp học, chẳng hạn như BrowsableDescription. Siêu dữ liệu này sau đó được sử dụng bởi PropertyGrid. Các ví dụ khác về thuộc tính sẽ là các thuộc tính Serializable hoặc Obsolete được sử dụng trong quá trình tuần tự hóa hoặc để đánh dấu các phần tử mã là lỗi thời.

Bạn có thể thêm thuộc tính vào lớp, thuộc tính, phương pháp và sự kiện bằng cách sử dụng cú pháp [AttributeName (parameter1, ...)].

Thuộc tính tùy chỉnh đề cập đến các thuộc tính bắt nguồn từ System.Attribute không phải là thuộc tính tiêu chuẩn trong khuôn khổ .NET.

3

Thuộc tính được sử dụng để lập trình meta.meta-programming giúp bạn đạt được sự năng động với mã của bạn khi chạy. Giả sử bạn có 10 đạo cụ trong lớp và bạn chỉ muốn đọc một số đạo cụ cụ thể vì lý do nào đó, để thực hiện điều này, bạn sẽ áp dụng một số thuộc tính đặc biệt cho các đạo cụ và thời gian chạy, thông qua phản xạ. các thuộc tính và sau đó thực hiện công việc của bạn trên các đạo cụ đó. Đây chỉ là một ví dụ.

Trong trường hợp của chúng tôi, chúng tôi có khung xác thực điều khiển thuộc tính. vì vậy nếu muốn có một prop. không được để trống trước khi đối tượng được lưu vào cơ sở dữ liệu, chúng ta sẽ đánh dấu nó là thuộc tính NotNullOrEmpty và lớp cơ sở sẽ có phương thức Validate() sẽ được gọi trước khi lưu đối tượng vào cơ sở dữ liệu. Phương thức Validate() sẽ lọc obj. đạo cụ. với các thuộc tính Validatable và thực hiện xác nhận và ném ngoại lệ trong trường hợp xác nhận hợp lệ bị vi phạm.

+0

Giải thích và ví dụ tuyệt vời, tôi chỉ có trường hợp như vậy ngay bây giờ, vì vậy cảm ơn bạn ! – greenoldman

6

Khi bạn viết mã, bạn trả lời "cái gì?" câu hỏi:

  1. phải làm gì? (phương pháp)
  2. những gì cần lưu trữ? (các trường và thuộc tính)
  3. là gì? (phân cấp lớp)

vv Thuộc tính thêm thứ nguyên khác cho câu hỏi này. Họ trả lời "làm thế nào?" câu hỏi. Và câu trả lời cho "làm thế nào?" Câu hỏi có thể quan trọng đối với IDE,

[Browsable(false)] 
public string NotImportantField { get; set; } // property which will not be displayed in VS 

cho trình biên dịch

[ThreadStatic] 
private static RequestContext context; // field which will be different for every thread 

hoặc cho một mã mà phân tích của bạn thông qua phản ánh.

[XmlIgnore] 
public string NotSerializableField { get; set; } // property which will not be xml-serialized 

bạn có thể muốn xác định thuộc tính tùy chỉnh, nếu lắp ráp, các lớp học, các lĩnh vực, các phương pháp của bạn, vv sẽ được phân tích hoặc gọi thông qua phản ánh (mà thường là trường hợp ví dụ với đảo ngược của container điều khiển và aspect- định hướng lập trình). Thuộc tính như vậy có thể (và thường là cách duy nhất để) hướng dẫn người gọi hoặc người phân tích hành xử khác nhau tùy thuộc vào sự hiện diện thuộc tính hoặc thuộc tính của nó.

Giới thiệu về câu hỏi đầu tiên của bạn, chúng tôi biết phương pháp nào cần gọi cho một kết quả cụ thể? Một trong những ưu điểm của việc trở thành một nhà phát triển .NET là mọi thứ đều được ghi lại khá kỹ lưỡng. :)

0

Thuộc tính được sử dụng khi bạn muốn chỉ định loại nhất định ép để báo cáo chương trình của bạn:

Exapmple:

[StructLayout(LayoutKind::Sequential)] 
value struct Point 
{ 
public: 
    int x; 
    int y; 
}; 

Trên bạn đang xác định rằng cấu trúc nên một tuần tự.

Một ví dụ khác là:

[DllImport("user32.dll",CallingConvention=CallingConvention::StdCall)] 

Ở đây bạn được quy định cụ thể để nhập khẩu một dll sử dụng DllImport bằng cách sử dụng các thuộc tính. Tôi hy vọng bạn có thể tìm hiểu mục đích của thuộc tính là gì.

Bây giờ, làm thế nào để biết các thuộc tính nào sẽ được sử dụng khi nào và chức năng nào giống như cách bạn đã học hàm, đại biểu và sự kiện ... theo thời gian và sử dụng nó. Ngoài ra nhiều người có thể đã trả lời như vậy cho bạn.

0

Nếu bạn muốn có một ví dụ rất hữu ích về nơi các thuộc tính có thể hữu ích và cách thực hiện mã phản chiếu để truy cập chúng, hãy kiểm tra Enum ToString. Sử dụng mã đó, nó trở nên dễ dàng để ràng buộc một ComboBox để enum của bạn để có sự lựa chọn an toàn, cũng như mô tả khá dễ đọc con người:

public static void ComboItemsFromEnum<EnumType>(ComboBox combobox) where EnumType : struct 
{ 
    combobox.FormattingEnabled = true; 
    foreach (object enumVal in System.Enum.GetValues(typeof(EnumType))) 
    { 
     combobox.Items.Add(enumVal); 
    } 
    combobox.Format += delegate(object sender, ListControlConvertEventArgs e) 
    { 
     e.Value = GetDescription<EnumType>(e.Value); 
    }; 
} 
Các vấn đề liên quan