9
votes

Méthode d'extension et coulée explicite

J'utilise la classe à partir de certains assembly (le code source n'est pas disponible), il n'est donc pas possible de modifier le code de leur Je dois ajouter une méthode d'extension pour l'opérateur de distribution explicite, y a-t-il un moyen de réaliser cela? (J'ai essayé d'ajouter une méthode d'extension régulière, mais sans succès) xxx

Comment puis-je résoudre ce problème?


4 Réponses :


2
votes

Non, vous ne pouvez pas ajouter de conversion d'extension.

Les conversions explicites ou implicites ne peuvent être définies que si vous contrôlez le code source de l'un des types impliqués. Dans votre cas, vous pouvez contrôler l'utilisateur ou ou utilisateur , vous n'avez pas besoin de contrôler les deux. Mais vous devez contrôler un.

Si vous contrôlez ni, vous devez simplement définir la conversion dans une méthode de certaines autres catégories dont le travail doit contrôler une telle conversion. xxx


0 commentaires

14
votes

Vous ne pouvez pas surcharger aux opérateurs via des méthodes d'extension.

meilleur que vous puissiez faire avec une méthode d'extension: xxx


2 commentaires

Point de pédalage rapide: vous ne pouvez pas Ouvrir des opérateurs du tout - vous pouvez surcharge eux - mais pas avec des méthodes de vulgarisation, comme vous le dites.


@ Jonskeet - C'est une mauvaise habitude d'utiliser le remplacement et la surcharge de manière interchangeable, même si je sache mieux. :)



6
votes

Comme d'autres l'ont dit, vous ne pouvez pas surcharger des opérateurs à l'aide de méthodes d'extension - mais une méthode d'extension simple serait toujours utile:

User user = ...;
MembershipUser membershipUser = (MembershipUser) user;


0 commentaires

1
votes

Ne pas dire que ceci est une bonne pratique (lisez d'autres réponses pour pourquoi vous ne devriez pas le vouloir, mais si les classes ne sont pas scellées, cela est possible, n'utilisez tout simplement pas de méthodes d'extension).

Fondamentalement, vous pouvez créer un Classe de substitution héritante des utilisateurs qui définit l'opérateur de casting, quelque chose comme: xxx


0 commentaires