Kann ich erstellen Accessoren auf structs automatisch zu / von anderen Datentypen umwandeln?
Frage
ist es möglich, so etwas wie die folgende zu tun:
struct test
{
this
{
get { /*do something*/ }
set { /*do something*/ }
}
}
so, dass, wenn jemand versucht, dies zu tun,
test tt = new test();
string asd = tt; // intercept this and then return something else
Lösung
Konzeptionell, was wollen Sie hier zu tun ist in der Tat möglich, innerhalb von .NET und C #, aber du bist auf dem Holzweg in Bezug auf die Syntax auf. Es scheint wie ein implizite Konvertierung Operator die Lösung hier wäre,
Beispiel:
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.
}
}
Auf diese Weise können Sie zuweisen und Rückgabe-Strings (oder jede andere Art) zu / von Objekten Ihrer benutzerdefinierten Typ (Foo
hier).
var foo = new Foo();
foo = "foobar";
var string = foo; // "foobar"
Die beiden implizite Konvertierung Betreiber müssen natürlich nicht symmetrisch sein, obwohl es in der Regel sinnvoll.
Hinweis: Es gibt auch explicit
Konvertierungsoperator, aber ich denke, Sie sind mehr nach impliziten Operatoren.
Andere Tipps
Die Erweiterung auf MikeP Antwort Sie wollen etwas wie:
public static implicit operator Test( string value )
{
//custom conversion routine
}
oder
public static explicit operator Test( string value )
{
//custom conversion routine
}