Classe les deux s'étend une classe abstraite et implémente une interface
Que faire si j'ai une classe que les deux s'étend une classe abstraite et implémente une interface, par exemple:
class Example : AbstractExample, ExampleInterface
{
//class content here
}
Comment puis-je initialiser cette classe donc je peux accéder à des méthodes de l'interface et la classe abstraite?
Quand je fais:
AbstractExample example = new Example();
Je ne peut pas accéder à toutes les méthodes de l'interface.
OriginalL'auteur Richard Knop | 2009-04-25
Vous devez vous connecter pour publier un commentaire.
Le dernier exemple va vous lient à un solide instance de l'interface ou une classe abstraite qui je suppose n'est pas votre objectif.La mauvaise nouvelle est que vous n'êtes PAS dans un typées dynamiquement langue ici, de sorte que votre coincé avec soit une référence à un solide "Exemple" des objets comme précédemment sprcified ou de coulée/uncasting je.e:
Vos autres alternitives sont à la fois AbstractExample et IExampleInterface mettre en œuvre une interface commune, de sorte que vous auriez à savoir
Maintenant, vous pouvez travailler avec ICommonInterface et la fonctionnalité à la fois de la classe abstraite et la mise en œuvre de votre IExample interface.
Si aucune de ces réponses sont acceptables, vous pouvez regarder une partie de la DLR langues qui s'exécutent sous le .NET framework, c'est à dire IronPython.
Ouais, je pense que beaucoup de gens sont venus à partir de cet arrière-plan, trop (moi y compris). Vous pouvez faire des choses avec des langages statiques qui ne sont pas possible avec dynamiques et vice-versa. La meilleure chose à faire est de comprendre la différence et de voir où la ligne peut être légèrement estompée. .NET 3.5 introduit quelques fonctionnalités qui rendent la langue "dynamicish", Kent Boogaart de la solution est un bon début, peut-être à obtenir les caractéristiques de votre recherche de sans le niveau de verbosité des interfaces supplémentaires.
Downvoted. C# n'est pas un typées dynamiquement de la langue. Aussi, vous n'avez pas à fournir la réponse la plus simple, qui est un Exemple de exemple = new Exemple();
Batum & @Noldorin: Pure faute de frappe et n'en vaut pas un downvote, simplement manqué "NON". @Paul Batum - Votre manque le moment, la posté ne voulait visiblement pas une forte dépendance avec l'Exemple de la classe, c'est pourquoi il interfacé et abstrait.
upvoted. Cela aide énormément. Et, parfois, les gens peuvent être trop rapide sur le downvote. Le contexte de la phrase devrait vous ai donné un indice qu'il y avait une faute de frappe. 🙂
OriginalL'auteur Owen
Vous devez
Example example = new Example();
OriginalL'auteur Stefan Steinegger
Si vous ne connaissez que la classe abstraite, il suggère que vous savez le type réel via une instance de
Type
. Par conséquent, vous pouvez utiliser des génériques:OriginalL'auteur Kent Boogaart
Utilisation:
Mis à jour après plus d'information:
Si vous êtes sûr il met en œuvre ExampleInterface, vous pouvez utiliser
Vous pouvez aussi, assurez-elle vraiment la met en œuvre, par la vérification de l'interface avec
Je ne crois pas que les Génériques de vous aider que ceux qui sont résolues au moment de la compilation, et si vous avez seulement une référence à la AbstractClass le compilateur va se plaindre.
Edit: Donc plus ou moins ce que Owen a dit. 🙂
OriginalL'auteur Mikko Rantanen
Je pense que cet exemple vous aidera à:
ProcessData()
venir? Il n'y a aucune mention de celui-ci au-delà de l'instanciation.J'ai édité ma réponse pour vous. Créer la mise en œuvre de la classe et d'héritage de la classe de base d'abord et ensuite le ICrud interface.
Nous vous remercions de prendre le temps de clarifier. Très agréable.
OriginalL'auteur Toffee