interface ILol
{
void LOL();
}
class Rofl : ILol
{
void ILol.LOL()
{
GlobalLOLHandler.RaiseROFLCOPTER(this);
}
public Rofl()
{
//Is there shorter way of writing this or i is there "other" problem with implementation??
(this as ILol).LOL();
}
}
Répondre
Vous avez mis l'interface explicitly qui, en général, vous n'avez pas besoin de le faire. Au lieu de cela, tout mettre en œuvre implicitement et l'appeler comme vous le feriez pour tout autre méthode:
class Rofl : ILol
{
public void LOL() { ... }
public Rofl()
{
LOL();
}
}
(. Notez votre mise en œuvre devra également être public)
Vous vous rendez compte que votre exemple de code l'implémenter explicitement encore, non? :) –
Bon seigneur, c'est embarrassant. Fixe - merci !! – ladenedge
Quelle est la différence entre implémentation implicite et explicite? Si je n'ajoute pas ILol. avant LOL, alors le compilateur se plaint qu'il n'y a pas d'implimentation de ILol.LOL. –
Ne pas utiliser as
, juste jeté:
((ILol)this).LOL();
Vous pouvez modifier la distribution (this as ILol)
-((ILol)this)
. Un cast est autorisé à retourner null, ce qui pourrait causer des erreurs plus tard et que le compilateur doit tester.
Reviens? Qu'est-ce qui ne va pas avec le casting 'as', par rapport au non-' as'? – bobobobo
L'utilisation de l'objet renvoyé par 'as' avant de rechercher null est une mauvaise pratique. Le code ci-dessus ne présentera aucun problème tel qu'il est écrit, mais ne sera pas aussi résistant lors du refactoring. – ladenedge
L'incantation peut retourner null, donc le compilateur doit tester null avant d'appeler la méthode afin qu'il puisse générer l'exception de référence nulle. une distribution régulière ne peut jamais renvoyer de valeur nulle, de sorte que le compilateur peut élider le test pour null. – Stewart
Non, pas si vous implémentez explicitement l'interface. Si vous le faites implicite en supprimant le nom d'interface de la méthode implémentée, cela fonctionnera comme vous le souhaitez.
void LOL()
{
GlobalLOLHandler.RaiseROFLCOPTER(this);
}
public Rofl()
{
LOL();
}
Vous n'avez pas besoin de jeter du tout. Depuis ROFL
implémente ILOL
vous pouvez simplement appeler this.LOL()
ou même simplement LOL();
-1 Incorrect. ROFL implémente explicitement 'ILOL' et ne peut pas accéder aux membres' ILOL' sans avoir accès à une instance ('this' casted) de' ILOL'. – statenjason
- 1. comment référencer une classe supérieure au sein d'une classe anonyme
- 2. Méthode la plus optimale pour analyser la chaîne querystring au sein d'une chaîne en C#
- 3. Quelle est la « < > » syntaxe au sein de C#
- 4. CDI intercepteurs d'appel méthode annotée au sein même instance
- 5. posix_memalign python au sein
- 6. WPF: Trouver des ressources de UserControl au sein DataTemplateSelector classe
- 7. Java étend les classes - Partager les champs de classe au sein de la super étendues classe
- 8. alias zsh au sein de la fonction
- 9. crash au sein CString
- 10. Nombre de sous-chaînes au sein de la chaîne
- 11. Prévention capture d'écran au sein de Delphi
- 12. passer variable par référence au sein de la classe? en php
- 13. Support multi-processus au sein de la même application?
- 14. du style d'une division de classe au sein de la division ID
- 15. UTC au sein du site
- 16. Comment créer des tableaux const d'instances d'une classe, au sein de cette classe?
- 17. ASP.NET MVC parcourt la collection au sein de la collection
- 18. Éléments d'accès au sein des formulaires en C#
- 19. navigateur de lancement au sein CherryPy
- 20. Appel de la fonction PHP au sein de Javascript
- 21. MySQL Stockage de données illimité au sein de la ligne
- 22. javascript regex: valeur de correspondance au sein de la chaîne
- 23. révisions de manutention au sein d'Oracle
- 24. Hébergement ASP.NET au sein de mon application
- 25. Trouver des classes au sein de Jar
- 26. PreparedStatement alternative au sein de l'APP?
- 27. Count noeuds XML spécifiques au sein XML
- 28. variables évaluation au sein de la boucle R
- 29. Télécharger des fichiers, formulaire au sein de la forme
- 30. En utilisant la .load jQuery() Fonction au sein de WordPress
Essayez d'éviter d'appeler des fonctions «virtuelles» d'un constructeur! Vous pouvez finir par appeler une implémentation qui accède à un objet non entièrement construit. –