Este dilema se puede resolver de variadas maneras, sin embargo te dejamos la que para nosotros es la resolución más completa.
Solución:
Implícito significa que la conversión no requiere una conversión en su código.
Ahora puedes hacer esto:
Savepoint point = new Savepoint();
if(point) // becomes a bool using your operator
en lugar de tener que hacer esto:
Savepoint point = new Savepoint();
if((bool)point) // an "explicit" conversion
Un ejemplo de por qué esta es una distinción útil son los tipos numéricos. Hay una conversión implícita de tipos “más pequeños” a tipos “más grandes”, por ejemplo:
float f = 6.5;
double d = f; // implicit conversion
Pero convertir tipos más grandes en tipos más pequeños puede ser peligroso, por lo que solo hay una conversión explícita, lo que obliga al usuario a aclarar que realmente tiene la intención de realizar la operación en cuestión:
long l = 20;
// short s = l;
short s = (short)l; // explicit conversion
Eso parece un mal uso de un operador implícito. No sé qué hace la clase Savepoint, pero convertirla en booleana no parece lógico. El operador implícito le permite verificar si una referencia de Savepoint es null o no simplemente evaluando la referencia:
if (point) {
en vez de:
if (point != null) {
Si se usa de esa manera, eso oculta lo que realmente está haciendo el código, y eso va en contra de casi todo lo que se trata de C#.
Solo para agregar a la respuesta de mquander.
De la especificación del lenguaje C# 3.0:
Una declaración de operador de conversión que incluye el
implicit
La palabra clave introduce una conversión implícita definida por el usuario. Las conversiones implícitas pueden ocurrir en una variedad de situaciones, incluidas las invocaciones de miembros de funciones, las expresiones de conversión y las asignaciones.
(sección 10.10.3)
valoraciones y reseñas
Si eres capaz, puedes dejar un artículo acerca de qué te ha impresionado de esta división.