los operadores en Nullable<T>
son operadores "levantados". Lo que esto significa es: si T tiene el operador, T? tendrá la contraparte "levantada".
& & y || no son realmente operadores en el mismo sentido que & y | - por ejemplo, no pueden ser sobrecargados - a partir de la especificación ECMA sobrecarga 14.2.2 Operador:
Los operadores binarios sobrecargable son: + - * /% & |^< < >> ==! => <> = < = Solo los operadores enumerados anteriormente pueden estar sobrecargados. En particular, no es posible sobrecargar el acceso de miembros, invocación de métodos, o los =, & &, ||, ??,?:, Comprobado, sin control, nueva, typeof, como, y es operadores.
Del mismo modo, a partir de la especificación ECMA, 14.2.7 operadores levantada, los operadores son levantadas:
Para los operadores unitarios + ++ - -! ~
Para los operadores binarios + - * /% & |^< < >>
Para los operadores de igualdad ==!=
Para los operadores relacionales <> < => =
Así que, básicamente, los operadores de cortocircuito no se definen como operadores levantadas.
[editar: añadido hoja de cuna]
operador levantada: un compilador proporcionado operador en Nullable<T>
, en base a los operadores de T - por ejemplo: el operador int
"+" se "levantado" en int?
, definido como:
(int? x, int? y) => (x.HasValue & & y.HasValue)? (x.Value + y.Value): (int?) null;
Sobrecarga del operador: el acto de proporcionar una implementación de operador personalizado para un tipo dado; por ejemplo decimal
y DateTime
proporcionan diversos operador sobrecarga
corto-circuito: el comportamiento normal de &&
y ||
(en muchos idiomas, incluyendo C++ y C#) - es decir, el segundo operando no podría ser evaluado - es decir
(expresión1, expresión2) => expresión1()? expression2(): falso;
O tal vez un ejemplo más simple:
bool someFlag = Method1() && Method2();
si Method1()
vuelve falsa, entonces Method2()
no se ejecuta (ya que el compilador ya sabe que la respuesta general es falsa). Esto es importante si Method2()
tiene efectos secundarios, ya que como guardar en la base de datos ...
Gracias. Sin embargo, después de C++, toda esta terminología ... cortocircuito, levantado ... imposibilidad de anular && ... suena bastante extraño para mí :) – badbadboy
Agregaré una hoja de cuna ;-p –
@Marc Gravell: gracias !! – badbadboy