remito a la sección 7.6.2 de la especificación, que establece:
Para una operación de la forma -x, se aplica unario resolución de sobrecarga del operador para seleccionar una aplicación específica del operador. El operando se convierte al tipo de parámetro del operador seleccionado, y el tipo de resultado es el tipo de retorno del operador. Los operadores de negación predefinidos son: negación
Entero:
int operator –(int x);
long operator –(long x);
El resultado se calcula restando x de cero. Si el valor de x es el valor representable más pequeño del tipo de operando (-2^31 para int o -2^63 para long), entonces la negación matemática de x no es representable dentro del tipo de operando. Si esto ocurre dentro de un contexto verificado, se lanza una System.OverflowException; si ocurre dentro de un contexto no verificado, el resultado es el valor del operando y el desbordamiento no se informa. Si el operando del operador de negación es de tipo uint, se convierte en tipo largo y el tipo de resultado es largo. Una excepción es la regla que permite que el valor int -2147483648 (-2^31) se escriba como un literal de entero decimal.
Si el operando del operador de negación es de tipo ulong, se produce un error en tiempo de compilación. Una excepción es la regla que permite escribir el valor largo -9223372036854775808 (-2^63) como un entero decimal.
de punto flotante negación:
float operator –(float x);
double operator –(double x);
El resultado es el valor de x con su signo invertido. Si x es NaN, el resultado también es NaN.
negación decimal:
decimal operator –(decimal x);
El resultado se calcula restando x de cero. La negación decimal es equivalente a usar el operador unario menos de tipo System.Decimal.
Como puede ver, no hay un operador menos definido en los cortos; la resolución de sobrecarga selecciona la que está en las inyecciones porque esa es la mejor coincidencia de todos los operadores unitarios menos disponibles.
Gran respuesta; ¡Gracias! Sin embargo, me pregunto por qué no hay un operador menos definido definido en los pantalones cortos. ¿Alguna teoria? – rabidpebble
@rabidpebble Esto es lo mismo, por supuesto, para (¿todos?) Operadores binarios. Por ejemplo 'p.mID + p.mID',' p.mID/p.mID', 'p.mID y p.mID' y muchos otros tendrán el tipo' int' incluso cuando ambos operandos son 'cortos's . –