type programming operator implicito convert casteo cast .net operator-overloading implicit typeconverter

.net - programming - ¿Los operadores implícitos y TypeConverters son equivalentes?



implicit operator string c# (4)

Me parece muy fácil implementar un operador implícito versus un TypeConverter, por lo que supongo que no son equivalentes debido a la prevalencia de TypeConverters en el marco (vea todo lo que amplíe FrameworkElement).

¿Pero por qué? ¿No hubiera sido mucho más fácil crear operadores implícitos string-> object y object-> string y aprovechar aquellos en serialización (tanto XML como XAML)?

¿Es YAGNI? Responsabilidad única? ¿Porque no puede especificar sobrecargas del operador en las interfaces?


Los convertidores de tipo son mucho más complejos de lo que parecen; un convertidor de tipo tiene acceso a un rango de metadatos sobre el contexto de la conversión, por ejemplo, la propiedad y el objeto que están involucrados. Esto se usa para proporcionar opciones personalizadas por escenario (p. Ej .: enlaces desplegables vinculados, es decir, país / condado / ciudad / etc.). También puede especificar el convertidor de tipos por propiedad, que utilizo en muchos lugares para proporcionar un manejo diferente de varias propiedades de cadenas. Un operador trataría todas las cadenas de forma idéntica.

Un operador implícito solo conoce el valor que se está convirtiendo, pero tiene un soporte de tiempo de compilación mucho mayor.

O de otra manera: TypeConverter es una característica de framework con soporte de framework; los operadores son (principalmente) una función de idioma con soporte de idioma

Para agregar más, los convertidores de tipo (a pesar del nombre) no solo convierten:

  • proporcionan metadatos de subpropiedad (piénselo: expandir propiedades en PropertyGrid )
  • sugieren opciones disponibles para un tipo (piénselo: opciones desplegables en PropertyGrid )

Sin embargo, tenga en cuenta que se usan en más lugares que solo PropertyGrid ;-p


Los operadores implícitos son agradables, pero también pueden ser confusos. Creo que cuando necesitas convertir de un tipo a otro es mejor ser explícito ya que no hay dudas sobre lo que está sucediendo.

También los operadores implícitos parecían estar reservados para cosas que son muy parecidas y la conversión implícita es intuitiva. Pero supongo que eso es todo subjetivo de todos modos, usa tu mejor juicio.


No soy un experto en esto.

Pero a primera vista, parece que puede proporcionar convertidores fuera de la clase original (en comparación con el operador implícito) y tal vez pueda definir múltiples clases TypeConverter para una misma cosa (si desea obtener diferentes vistas para el mismo valor).


Solo curiosidad: TypeConverters puede trabajar con el diseñador de estudio visual, de modo que si proporciona el TypeConverter adecuado para propiedades como Lists o Array, puede configurarlo a través del diseñador. ¿Los operadores implícitos también brindan este servicio? Si no, sospecho que responde a su pregunta: se usan en el marco para que los controles que usan esos elementos puedan funcionar con el diseñador.