2009-04-07 29 views
9

Nhiều lần tôi đã nhìn thấy ReSharper tạo mã trông như thế này:Tiền tố @ cho đại biểu có bất kỳ ý nghĩa đặc biệt nào không?

delegate void myHandler(int i); 
myHandler myHandlerContainer; 
... 
foreach (Delegate @delegate in myHandlerContainer.GetInvocationList()) 
{...} 

Liệu '@' trong @delegate cho biến mà bất kỳ ý nghĩa ngữ nghĩa đặc biệt không?
Hay đó chỉ là một quy ước mà tôi chưa từng gặp trước đây?

Trả lời

14

Một số chi tiết từ MSDN:

Tiền tố "@" cho phép việc sử dụng các từ khóa như nhận dạng, đó là hữu ích khi giao tiếp với khác ngôn ngữ lập trình. Ký tự @ không thực sự là một phần của mã định danh , do đó, số nhận dạng có thể là được thấy bằng các ngôn ngữ khác dưới dạng số nhận dạng bình thường , không có tiền tố. Số nhận dạng có tiền tố @ được gọi là số nhận dạng nguyên văn. Sử dụng tiền tố @ cho số nhận dạng không phải là từ khóa được phép, nhưng mạnh mẽ không được khuyến khích như một vấn đề về phong cách.

từ C# Language Specification: 2.4.2 Identifiers.

Tiền tố với '@' do đó cho phép, ví dụ: để lấy được từ một lớp có tên là "đại biểu" có thể được định nghĩa trong một thư viện được viết bằng ngôn ngữ khác với C#.

Trong bất kỳ trường hợp nào khác, tôi không khuyên bạn nên sử dụng cú pháp này và tạo nên số nhận dạng khác với từ khóa C# (ví dụ valu thay vì giá trị) để tăng khả năng đọc mã và tránh nhầm lẫn có ý nghĩa đặc biệt nào không.

Ngoài ra còn có một thực tế thú vị về cách đặt tên biến nêu có:

định danh chứa hai liên tiếp nhấn ký tự (U + 005F) là dành cho sử dụng bởi việc thực hiện . Ví dụ: triển khai có thể cung cấp các từ khóa mở rộng bắt đầu bằng hai số gạch dưới.

+0

Tuyệt vời! Đó là tài liệu tham khảo tôi đang tìm kiếm :-) – devstuff

12

"@delegate" là để phân biệt tên biến từ từ khóa "đại biểu".

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