Puis-je créer accesseurs sur struct pour convertir automatiquement / d'autres types de données?
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
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
}