Posso creare funzioni di accesso sulle strutture per convertire automaticamente da / a altri tipi di dati?
Domanda
è possibile fare qualcosa di simile al seguente:
struct test
{
this
{
get { /*do something*/ }
set { /*do something*/ }
}
}
in modo che se qualcuno ha provato a fare questo,
test tt = new test();
string asd = tt; // intercept this and then return something else
Soluzione
Concettualmente, ciò che si vuole fare qui è infatti possibile entro .NET e C #, ma si sta abbaiando contro l'albero sbagliato per quanto riguarda la sintassi. Sembra un operatore di conversione implicita sarebbe la soluzione qui,
Esempio:
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.
}
}
Questo consente di assegnare e restituiscono stringhe (o qualsiasi altro tipo) da / per oggetti del tipo personalizzato (Foo
qui).
var foo = new Foo();
foo = "foobar";
var string = foo; // "foobar"
I due operatori di conversione implicita non devono essere simmetrica naturalmente, anche se di solito è consigliabile.
Nota: Ci sono anche explicit
operatori di conversione, ma penso siete più dopo gli operatori impliciti.
Altri suggerimenti
È possibile definire implicita e operatori di conversione esplicito da e verso il tipo personalizzato
public static implicit operator string(test value)
{
return "something else";
}
risposta di MikeP si desidera qualcosa di simile:
public static implicit operator Test( string value )
{
//custom conversion routine
}
o
public static explicit operator Test( string value )
{
//custom conversion routine
}