Puis-je créer accesseurs sur struct pour convertir automatiquement / d'autres types de données?

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

  •  23-09-2019
  •  | 
  •  

Question

est-il possible de faire quelque chose comme ce qui suit:

struct test
{
   this
   {
      get { /*do something*/ }
      set { /*do something*/ }
   }
}

de sorte que si quelqu'un a essayé de le faire,

test tt = new test();
string asd = tt; // intercept this and then return something else
Était-ce utile?

La solution

Conceptuellement, ce que vous voulez faire ici est en fait possible dans .NET et C #, mais vous êtes aboiements le mauvais arbre en ce qui concerne la syntaxe. Il semble que opérateur de conversion implicite serait la solution ici,

Exemple:

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.
   }
}

Cela vous permet d'assigner et de retourner des chaînes (ou tout autre type) à / à partir d'objets de votre type personnalisé (Foo ici).

var foo = new Foo();
foo = "foobar";
var string = foo; // "foobar"

Les deux opérateurs de conversion implicites ne doivent pas être symétrique bien sûr, mais il est généralement conseillé.

Note: Il y a aussi explicit opérateurs de conversion, mais je pense vous êtes plus après les opérateurs implicites.

Autres conseils

Vous pouvez définir implicite et opérateurs de conversion explicite vers et à partir de votre type personnalisé

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

la réponse de MikeP vous voulez quelque chose comme:

public static implicit operator Test( string value )
{
    //custom conversion routine
}

ou

public static explicit operator Test( string value )
{
    //custom conversion routine
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top