2011-10-21 31 views
5

Khi bạn quá tải một nhà điều hành, chẳng hạn như operator +, CIL biên soạn trông giống như sau:Tại sao lại sử dụng tên 'op_Addition' cho toán tử '+' thay vì tên '+'?

.method public hidebysig specialname static bool op_Addition(...) { ... } 

Tại sao sử dụng tên op_Addition ở đây và không, nói rằng, tên +?

Tôi gợi ý rằng cú pháp CIL cần phải có được

.method public hidebysig specialname static bool +(...) { ... } 

Và tên thành viên, khi tìm kiếm nó, có thể đã được + hơn op_Addition.

Lưu ý: Đây là câu hỏi về thiết kế ngôn ngữ; "bởi vì spec nói như vậy" không phải là một câu trả lời hữu ích.

+1

"vì thông số kỹ thuật nói ... nvm Tôi đoán rằng op_Addition dễ phân tích cú pháp sau đó + – Joe

+6

Có lẽ bạn có thể giải thích lý do tại sao bạn cho rằng nó được gọi là' + 'thay thế. Đơn giản chỉ cần nói" nó phải là '+ "" là không hữu ích như tôi nói "bởi vì spec nói như vậy" – BoltClock

+1

@BoltClock: Bởi vì toán tử là '+', không phải 'op_Addition'. Nó tự nhiên hơn để gọi nó là' + '. Tôi chỉ tự hỏi rằng những lý do này có thể là gì. – configurator

Trả lời

13

Nếu bạn đặt tên phương thức +, thì chỉ có các ngôn ngữ hỗ trợ quá tải toán tử hoặc cho phép + làm số nhận dạng, có thể gọi phương thức cơ bản.

Tiêu chuẩn Unicode defines a syntax for identifiers bằng ngôn ngữ lập trình (xem Phụ lục 7), được chấp nhận bởi các CLS cho các quy tắc định danh, không bao gồm + trong cú pháp đó. Vì hầu hết các ngôn ngữ có hỗ trợ mã nhận diện Unicode sẽ tuân thủ cú pháp đó, nên không có bất kỳ ngôn ngữ nào để cho phép + làm định danh.

+0

Đây chính xác là những gì tôi đã mất tích - cảm ơn. – configurator

1

CLR không biết về toán tử, do đó trình biên dịch C# tạo ra các phương thức với các tên đặc biệt để các ngôn ngữ khác .net không hỗ trợ các toán tử có thể sử dụng chúng như các phương thức.

CLR Via c# là tham chiếu tốt cho loại câu hỏi này.

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