¿Puedo crear descriptores de acceso de estructuras para convertir automáticamente a / desde otros tipos de datos?
Pregunta
Es posible hacer algo como lo siguiente:
struct test
{
this
{
get { /*do something*/ }
set { /*do something*/ }
}
}
de manera que si alguien trató de hacer esto,
test tt = new test();
string asd = tt; // intercept this and then return something else
Solución
Conceptualmente, lo que quiere hacer aquí es de hecho posible dentro de .NET y C #, pero usted está ladrando al árbol equivocado con respecto a la sintaxis. Parece una rel="noreferrer"> operador de conversión implícita sería la solución aquí,
Ejemplo:
struct Foo
{
public static implicit operator string(Foo value)
{
// Return string that represents the given instance.
}
public static implicit operator Foo(string value)
{
// Return instance of type Foo for given string value.
}
}
Esto le permite asignar y cadenas de retorno (o de cualquier otro tipo) a / de los objetos de su tipo personalizado (Foo
aquí).
var foo = new Foo();
foo = "foobar";
var string = foo; // "foobar"
Los dos operadores de conversión implícitas no tiene que ser simétrica, por supuesto, aunque por lo general es aconsejable.
Nota: También hay explicit
operadores de conversión, pero creo eres más después de operadores implícitos.
Otros consejos
Se puede definir implícito y operadores de conversión explícitas desde y hacia su tipo personalizado
public static implicit operator string(test value)
{
return "something else";
}
Ampliando la respuesta de Mikep desea algo como:
public static implicit operator Test( string value )
{
//custom conversion routine
}
o
public static explicit operator Test( string value )
{
//custom conversion routine
}