2010-11-25 13 views
86

poco me encontré con este código:estático operador implícita

public static implicit operator XElement(XmlBase xmlBase) 
{ 
    return xmlBase.Xml; 
} 

¿Qué significa static implicit operator?

Respuesta

159

Este es un conversion operator. Significa que puede escribir este código:

XmlBase myBase = new XmlBase(); 
XElement myElement = myBase; 

¡Y el compilador no se quejará! En tiempo de ejecución, se ejecutará el operador de conversión, pasando myBase como el argumento, y devolviendo un XElement válido como resultado.

Es una manera para que usted como desarrollador para decirle al compilador:

"a pesar de que éstas parecen dos tipos totalmente sin relación, no es en realidad una forma de convertir de una a la otra; sólo me deje manejar la lógica de cómo hacerlo ".

+5

+1. Yo agregaría que si bien hay buenos usos ocasionales de la conversión implícita, también puede causar errores extraños/sorprendentes y puede confundir a un usuario API (humano). A modo de ejemplo, hay muy pocos usos de conversiones implícitas en el BCL. ¡Úselo con discreción! –

8

Tal operador implícito significa que puede convertir implícitamente XmlBase en XElement.

XmlBase xmlBase = WhatEverGetTheXmlBase(); 
XElement xelement = xmlBase; 
//no explicit convert here like: XElement xelement = (XElement)xmlBase; 
+0

¿Alguien me puede decir lo que está mal en mi respuesta? –

+0

¿Puede esta conversión explícita funcionar de todos modos? 'XElement xelement = (XElement) xmlBase;' En la pregunta dice 'static', ¿qué tiene que ser estático? ¿No puede ser no estático, por lo que se puede instanciar? – aspiring

2

Es un operador conversión implícita (en contraposición a un operador explícita, lo que requiere la sintaxis (type) conversión)

Cuestiones relacionadas