2010-03-01 3 views
10

est-il possible de faire quelque chose comme ce qui suit:Puis-je créer des accesseurs sur des structures pour convertir automatiquement d'autres types de données?

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 
+2

Je ne comprends pas la question. –

+0

@John Knoeller: mis à jour la question – caesay

+3

On dirait que vous voulez un opérateur de conversion ... – Shog9

Répondre

7

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 comme un implicit conversion operator 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) . Les deux opérateurs de conversion implicites ne doivent pas forcément être symétriques, bien que cela soit habituellement recommandé.

Remarque: Il existe également des opérateurs de conversion explicit, mais je pense que vous êtes plus nombreux après les opérateurs implicites.

+0

@sniperX: vous devez créer une nouvelle instance de Foo, basée sur la chaîne. – Shog9

+0

Oui, Shog9 a raison. Si vous ne voulez pas exposer le constructeur directement, il n'y a aucun problème à le rendre privé/protégé. – Noldorin

2

Vous pouvez définir des opérateurs de conversion implicit et explicit à et de votre type personnalisé.

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

expansion sur MikeP's answer 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 
} 
Questions connexes