2013-03-27 53 views
7

Trong đặc điểm kỹ thuật C# (17.2) nó cho biết có một số mục tiêu thuộc tính khi chỉ định một thuộc tính. Điều này là phổ biến khi bạn cần phải áp dụng một thuộc tính cho một cái gì đó mà thường không có một "thực" nơi để xác định một thuộc tính. Ví dụ, mục tiêu return được sử dụng thường xuyên trong nền tảng Invoke:Mục đích của thuộc tính-đích là gì?

[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SomeWin32Method(); //Assume this is valid, has a DllImport, etc. 

Tuy nhiên tôi nhận thấy rằng có mục tiêu thuộc tính khác, như method:

[method: DllImport("somelib.dll")] 
static extern bool SomeWin32Method(); 

Trong hoàn cảnh nào tôi sẽ cần phải xác định một cách rõ ràng method mục tiêu thuộc tính (nói để giải quyết sự mơ hồ), hoặc là nó chỉ ở đó vì lợi ích của sự hoàn chỉnh?

Trả lời

7

Bạn không cần chỉ định mục tiêu trong trường hợp này (nằm ngay phía trên phương thức, method là mục tiêu mặc định), nó chỉ ở đó để hoàn thành. Cũng giống như bạn không cần chỉ định private khi thêm thành viên vào lớp học, nhưng nhiều người vẫn làm điều đó. Và trong nhiều trường hợp, các máy tạo mã muốn hiểu rõ hơn về mọi thứ.

Ngoài ra, tôi nghĩ rằng trong những trường hợp như thế này, sự xác định thêm làm cho mọi thứ một chút rõ ràng hơn:

[method: SomeAttr] 
[return: SomeOtherAttr] 
int SomeMethod() { return 0; } 
+1

Ngoài ra, trong ví dụ '[phương pháp: SomeAttr] sự kiện công cộng Action MyFieldLikeEvent;', 'cái phương pháp : 'target không thừa. Nó có nghĩa là thuộc tính sẽ được áp dụng trên cả các trình truy cập được tạo tự động ('add' và' remove'). Mặc định sẽ là áp dụng thuộc tính cho chính sự kiện đó. –

+0

Tôi tin rằng bạn có nghĩa là bạn không cần phải chỉ định 'nội bộ', là công cụ sửa đổi truy cập mặc định cho các trường không xác định, v.v. – nicholas

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