Зачем использовать имя «op_Addition» для оператора «+», а не имя «+»? - PullRequest
5 голосов
/ 21 октября 2011

Когда вы перегружаете оператор, такой как operator +, скомпилированный CIL выглядит примерно так:

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

Зачем использовать здесь имя op_Addition, а не, скажем, имя +?

Я предполагаю, что синтаксис CIL должен был быть

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

И имя члена, при поиске, было бы +, а не op_Addition.

Примечание: это вопрос о дизайне языка; «потому что спецификация так говорит» не является полезным ответом.

Ответы [ 2 ]

13 голосов
/ 21 октября 2011

Если вы назвали метод +, то только языки, которые поддерживали перегрузку операторов или которые допускали + в качестве идентификатора, могли бы вызывать базовый метод.

Стандарт Unicode определяет синтаксис для идентификаторов в языках программирования (см. Приложение 7), который принят CLS для правил идентификатора, не включает + в этот синтаксис.Поскольку большинство языков с поддержкой идентификаторов Unicode будут придерживаться этого синтаксиса, нецелесообразно ожидать, что такие языки разрешат + в качестве идентификатора.

1 голос
/ 21 октября 2011

CLR не знает об операторах, поэтому компилятор c # генерирует методы со специальными именами, чтобы другие языки .net, не поддерживающие операторы, могли использовать их как методы.

CLRVia c # является хорошим справочным материалом для такого типа вопросов.

...