Kann ich erstellen Accessoren auf structs automatisch zu / von anderen Datentypen umwandeln?

StackOverflow https://stackoverflow.com/questions/2353632

  •  23-09-2019
  •  | 
  •  

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
War es hilfreich?

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

Sie können festlegen, implizite und explizite Umwandlung Betreiber und von Ihrem benutzerdefinierten Typ

public static implicit operator string(test value)
{
    return "something else";
}

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
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top