Posso creare funzioni di accesso sulle strutture per convertire automaticamente da / a altri tipi di dati?

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

  •  23-09-2019
  •  | 
  •  

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
È stato utile?

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top