2011-10-21 25 views
5

Cuando se sobrecarga un operador, tales como operator +, el CIL compilado ve algo como esto:¿Por qué usar el nombre 'op_Addition' para el operador '+' en lugar del nombre '+'?

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

¿Por qué usar el nombre op_Addition aquí y no, por ejemplo, el nombre +?

estoy sugiriendo que la sintaxis CIL debería haber sido

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

Y el nombre del miembro, en la búsqueda de ella, habría sido + en lugar de op_Addition.

Nota: esta es una pregunta sobre el diseño del lenguaje; "porque la especificación lo dice" no es una respuesta útil.

+1

"porque la especificación dice ... nvm Supongo que op_Addition es más fácil de analizar que. + – Joe

+6

Quizás podría explicar por qué sugiere que se llame' + 'en su lugar. Simplemente diciendo" debería haber sido '+ '" es tan poco útil como decir "porque la especificación lo dice" – BoltClock

+1

@BoltClock: porque el operador es '+', no 'op_Addition'. Es más natural llamarlo' + '. Sin duda, los diseñadores tenían razones para eso, me pregunto cuáles podrían haber sido estas razones. – configurator

Respuesta

13

Si nombró el método +, solo los lenguajes que admiten la sobrecarga del operador, o que permitieron + como identificador, podrían llamar al método subyacente.

El estándar Unicode defines a syntax for identifiers en lenguajes de programación (véase el anexo 7), que se adoptó por el CLS de las reglas de identificador, no incluye + en que la sintaxis. Dado que la mayoría de los lenguajes con soporte para identificadores Unicode se adherirán a esa sintaxis, no es razonable esperar que dichos idiomas permitan + como identificador.

+0

Esto es exactamente lo que me faltaba, gracias. – configurator

1

CLR no sabe nada de operadores, por lo que el compilador de C# genera métodos con sus nombres especiales para que otros lenguajes .NET que no tienen soporte para operadores puedan consumirlos como métodos.

CLR Via c# es una buena referencia para este tipo de pregunta.

Cuestiones relacionadas