Para poder implementar la conversión o el reparto personalizado, debemos ser conscientes de que hay dos funciones que nos permiten hacerlo y que deben implementarse en nuestra clase si queremos que esto funcione. Una conversión definida por el usuario consiste en una conversión explícita opcional seguida de un operador de conversión implícito o explícito definido por el usuario, finalizado por una conversión explícita estándar opcional. Si estás interesado, mira esta impresionante guía en MSDN que explica todo, en detalle, sobre las conversiones definidas por el usuario y sus pasos.
La función responsable de la conversión implícita tiene este aspecto:
123staticpublicimplicitoperator<class;};(<type;valor){retorno<class;}(){<valor;=valor,};boolean;=falso};}
csharp
La función responsable de la conversión explícita tiene este aspecto:
123explicitoperador público estático<tipo&(clase&instancia);){retorno<instancia&;.valor&;}
csharp
Vamos a definir nuestra clase personalizada.
1234567891011121314151617181920212223242526 usando System;namespace UserDefined{publicclassConversions{publicclassCustomType{publicint Number {get;set;}publicbool magic {get; set;}staticpublicimplicitoperatorCustomType(intvalue){returnnewCustomType(){Número =valor, magia =falso};}staticpublicexplicitoperatorint(CustomType magic){retorno mágico. Número;}}estáticoevitar el Principal(String[] args){int aNúmero =3;CustomType magic = aNúmero; Consola.WriteLine($"From int: {aNúmero}, a: {Magia}, Con valor: {Magia.Número}"); Consola.Leer();}}
csharp
Llamar al código nos muestra cómo la conversión va de un tipo a otro.
123De int: 3,a: UserDefined.Conversions+CustomType,con valor: 3
bash
Añadiendo este pequeño código podemos fácilmente convertir hacia atrás.
12int bNumber =(int)magic;Console.WriteLine($"From: {mágico}, Con valor: {mágico.Número}, a: {bNúmero}");
csharp
Esto da como resultado el siguiente resultado.
123De: UserDefined.Conversions+CustomType,con valor: 3,to: 3
bash
Como puede ver, estas dos funciones son todo lo que se necesita para convertir entre tipos, sin embargo, este es un ejemplo bastante simple y puede ser mejorado. La conversión global está definida por los requisitos de su aplicación y lo que necesita implementar en esas dos funciones.