2010-03-12 2 views
22

Je me demande simplement si quelqu'un connaît la raison pour laquelle vous n'êtes pas autorisé à utiliser des interfaces avec les opérateurs implicites ou explicites?Pourquoi ne puis-je pas utiliser l'interface avec un opérateur explicite?

E.g. cela soulève erreur de compilation de temps:

public static explicit operator MyPlayer(IPlayer player) 
{ 
... 
} 

"conversions définies par l'utilisateur ou à partir d'une interface ne sont pas autorisés"

Merci,

+0

L'approche la plus simple est, bien, juste implémenter l'interface pour votre classe concrète :) Voir aussi http://stackoverflow.com/questions/308986/user-defined-conversion-to-interface – nawfal

+0

que nous allons commencer ni 'public' ni' static' ne sont autorisés dans les définitions des membres de l'interface. – quetzalcoatl

Répondre

30

Section 10.9.3 of the C# spec sorts ça. La version courte est désactivée afin que l'utilisateur soit certain que les conversions entre types de référence et interfaces réussissent si et seulement si le type de référence implémente réellement cette interface, et que lorsque cette conversion a lieu, le même objet est référencé.

La définition d'une conversion implicite ou explicite entre des types de référence donne à l'utilisateur l'espoir qu'il y aura un changement de référence; après tout, la même référence ne peut pas être les deux types. D'autre part, l'utilisateur a pas ont la même attente pour les conversions entre les types de référence et les types d'interface.

User-defined conversions are not allowed to convert from or to interface-types. In particular, this restriction ensures that no user-defined transformations occur when converting to an interface-type, and that a conversion to an interface-type succeeds only if the object being converted actually implements the specified interface-type.

+0

merci, ça l'explique! – theburningmonk

+0

"La définition d'une conversion implicite ou explicite entre les types de référence donne à l'utilisateur l'espoir qu'il y aura un changement dans la référence" bonne explication! – jorgebg

+0

Cela explique pourquoi l'équipe de conception de langage a empêché les conversions implicites _to_ types d'interface. Savez-vous pourquoi ils ont également décidé de restreindre les conversions _from_ types d'interface? Était-ce juste pour la symétrie? –

Questions connexes