2010-02-19 57 views
42

Tôi đã thấy một số ví dụ về thuộc tính tận dụng, ví dụ: (dưới dạng bản đồ cho nhà máy động) http://msdn.microsoft.com/en-us/magazine/cc164170.aspxKhi nào tôi nên sử dụng thuộc tính trong C#?

Chỉ cần tự hỏi lợi thế của việc sử dụng thuộc tính là gì? Tôi có thể tìm thấy tài liệu tham khảo trên http://msdn.microsoft.com/en-gb/z0w1kczw(VS.80).aspx tuy nhiên, tôi không chắc chắn khi nào và tại sao tôi nên thử sử dụng nó.

+4

Dù bạn kết thúc quyết định phải làm gì, giữ thuộc tính của bạn dưới dạng dữ liệu thuần tuý không có hành vi. Nếu bạn cần triển khai hành vi dựa trên thuộc tính, hãy đặt hành vi trong một lớp khác để bạn có thể thay đổi hai cách độc lập. –

Trả lời

29

Trong .NET Framework, thuộc tính có thể được sử dụng vì nhiều lý do - như

  • Để lựa chọn lớp học serializable

  • Việc chọn phương pháp tiếp xúc trong một dịch vụ Web

Attributes cho phép chúng tôi thêm descriptions vào lớp học, các thuộc tính và các phương thức tại thời điểm thiết kế mà sau đó có thể được kiểm tra tại thời gian chạy thông qua sự phản chiếu.

Hãy xem xét ví dụ sau:

Giả sử bạn có một lớp học trong đó có một phương pháp từ phiên bản cũ mà vẫn còn được sử dụng cho bất cứ lý do và bây giờ bạn đã đưa ra một phiên bản mới của lớp mà làm tuyệt vời sử dụng Danh sách chung và LINQ và có một phương pháp mới cho mục đích tương tự. Bạn muốn các nhà phát triển thích bản mới hơn được cung cấp trong phiên bản sau của thư viện của bạn. Bạn sẽ làm nó thế nào ? Một cách là viết trong tài liệu. Cách tốt hơn là sử dụng thuộc tính như sau.

public class AccountsManager 
{ 
    [Obsolete("prefer GetAccountsList", true)] 
    static Account[] GetAccounts() { }  
    static List<Account> GetAccountsList() { }  
} 

Nếu sử dụng phương pháp obsolete khi chương trình được biên soạn, nhà phát triển nhận thông tin này và quyết định tương ứng.

AccountManager.GetAccounts() là lỗi thời: thích GetAccountsList

Chúng tôi cũng có thể tạo ra và thêm Custom Attributes theo yêu cầu.

tham khảo:


Hope this helps

+3

Thuộc tính là dữ liệu meta được thêm vào một lớp, giao diện, hàm, thuộc tính, v.v. trong .NET. Siêu dữ liệu cung cấp thông tin bổ sung ** về ** một mục và cung cấp cho người dùng của mục khả năng ackt khi nó. Thuộc tính được lưu trữ trên Loại và không phải trên cá thể. – AxelEckenberger

+0

Cảm ơn bạn đã trả lời và tham khảo. Có thể tôi không giỏi ở C# để tìm tình huống mà tôi muốn sử dụng thuộc tính tùy chỉnh. Tôi coi thuộc tính là mô tả được biên dịch. Vì nó đòi hỏi sự phản chiếu chậm để sử dụng, điều này khiến tôi cảm thấy nó không hữu ích. – ccppjava

+0

Tôi đã cập nhật câu trả lời với ví dụ. –

0

.NET Framework predefines và sử dụng loại thuộc tính để kiểm soát thời gian chạy hành vi của ứng dụng.

Xem xét thuộc tính [webmethod], tại khung thời gian chạy giải quyết thuộc tính này và xác định phương pháp này sẽ được hiển thị trong dịch vụ web.

Cùng một cách, bạn có thể viết các thuộc tính tùy chỉnh của mình để kiểm soát hành vi ứng dụng của bạn khi chạy. Thuộc tính có thể nhắm mục tiêu các lớp, phương thức, thuộc tính, đại biểu, enum, sự kiện, trường ...

Để giải quyết thuộc tính trong thời gian chạy, bạn phải sử dụng phản chiếu.

Thanh toán liên kết MSDN để biết thêm chi tiết.

4

Xem xét thuộc tính dưới dạng siêu dữ liệu về phương pháp hoặc thuộc tính của thuộc tính đó. Nó nói thêm về một thành viên.

5

Thuộc tính thích hợp khi bạn muốn đính kèm siêu dữ liệu vào lớp học hoặc thành viên lớp học, cũng như khi áp dụng một hành vi chung mà không phải triển khai giao diện nhất định cho mỗi đơn vị chia sẻ hành vi. Cái sau là một ví dụ của aspect-oriented programming.

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