¿Qué son los operadores levantados?

Estaba mirando este artículo y estoy luchando para seguir el ejemplo de VB.NET que explica los operadores levantados. No parece haber un ejemplo o tutorial equivalente de C #. No tengo mucha experiencia con la sobrecarga de operadores en general, por lo que tratar de llegar a un acuerdo con el equivalente de VB.NET mientras se lee sobre tipos anulables probablemente no sea el mejor lugar para comenzar …

¿Alguien podría proporcionar una explicación de los operadores levantados y cómo los usan los tipos anulables? ¿Simplemente significa que el tipo anulable no sobrecarga a los operadores y usará los operadores del tipo subyacente que representa?

No parece haber mucha información sobre SO sobre operadores levantados, así que con suerte esto también puede ayudar a otros.

Los operadores levantados son operadores que trabajan sobre tipos anulables “levantando” los operadores que ya existen en la forma no admitible. Entonces, por ejemplo, si lo haces:

int? x = 10; int? y = 10; int? z = x + y; 

Ese operador “+” se levanta. En realidad no existe en Nullable pero el comstackdor C # actúa como si lo hiciera, generando código para hacer lo correcto. (En la mayoría de los casos, se trata de verificar si alguno de los operandos es nulo; si es así, el resultado es nulo. De lo contrario, desenvuelva ambos operandos en sus valores no admitibles, utilice el operador normal y luego envuelva el resultado en un valor de nullable. Sin embargo, hay algunos casos especiales en torno a las comparaciones).

Consulte la sección 6.4.2 (operadores de conversión levantados) y 7.3.7 (operadores levantados) de la especificación C # para obtener más información.