Combien d'interfaces sont autorisés à être mis en œuvre?
En C#:
Combien d'interfaces une classe peut implémenter en même temps?
public class MyClass: IInteferface_1, IInterface_2, ... , IInterface_N
{
}
Est-il une limite pour N?
Ne vous inquiétez pas, je ne veux pas mettre en œuvre ou à maintenir un tel objet. Je me demandais juste si il y a une limite.
- Okie, vous pouvez downvote autant que vous voulez, mais je vais à nouveau downvote pour ne pas vraie question posée.
- Je pense que c'est une question tout à fait pertinente parce que la réponse ne sera pas seulement aider à comprendre les limites de la langue, mais il peut aussi aider à un programmeur de décider comment structurer leur code.
Vous devez vous connecter pour publier un commentaire.
Le C# langue n'impose pas de limite sur le nombre d'interfaces. Il y a deux limites cependant.
Tout d'abord, comme chibacity points, le compilateur va arriver de manquer de mémoire ou d'espace de pile lors du traitement d'un grand nombre d'interfaces, ou extrêmement profond hiérarchies d'interfaces.
Même si nous avons résolu ces problèmes, il y aurait toujours une deuxième question. L'implémentation de l'Interface est codée dans les métadonnées dans le InterfaceImpl table. Tables de métadonnées généralement peut pas avoir plus de 2^24 membres, de sorte que le total nombre d'interfaces mises en œuvre par tous les types dans une assemblée doit être inférieure à environ 16 millions de dollars.
Évidemment, vous allez jamais courir dans ces limites dans la pratique. Ne vous inquiétez pas à ce sujet.
Le nombre d'interfaces, vous pouvez mettre en œuvre est limitée par ce que le compilateur peut gérer. Trop grand nombre d'interfaces résultats dans un stackoverflow exception dans le compilateur C# (erreur CS1647). Cela me porterait à croire qu'il n'y a pas de limite fixée, mais que, sous certaines conditions, le compilateur va tout simplement de la bombe c'est à dire le nombre dépendra de la pile de l'espace est disponible lorsque le compilateur est de la manipulation de la classe.
La limite est susceptible d'être compilateur dépendante de la version trop. Le code suivant peut être utilisé pour générer un cas de test pour sonder la limite.
Si vous vous posez cette question en vue de la mise en œuvre de BEAUCOUP d'interfaces, je dirais que vous avez un sérieux problème de conception.
Autant que je sache, il n'y a pas de limite autre que la mémoire de votre ordinateur.
:-)
Compte de ce que cela signifie réellement pour le compiler /exécuter le temps de dire
MyClass: IInteferface_1, IInterface_2, ... , IInterface_N
. Il n'y a pas de conception de limite de temps comme le compilateur fait simplement en sorte que votre classe a (méthode) les signatures pour chaque interface de sa supposée à mettre en œuvre. Que pour un temps limite, je ne pense pas que la mémoire a moins d'impact que toute référence à votre classe par l'intermédiaire d'une interface, il met en œuvre (comme l'a vérifié au moment de la conception) serait tout simplement assurez-vous que votre classe a de la méthode appropriée de signature pour cette interface. Si l'objet n'implémente pas l'interface, l'objet serait manque juste la signature de la méthode.Je viens de vérifier la version actuelle de Microsoft C♯ Langage de Spécification de la Version 4.0, et il n'est fait mention d'une limite dans §1.6.4, §1.9, §10.1.4, §10.1.4.2 §13. Il n'est pas non syntaxique limite dans la grammaire dans le §B. 2.7.
Évidemment je n'ai pas lu la totalité de 500 pages, mais je ne sais pas où d'autre, dans ce document, une limite peut être mentionné.
Remarque: cela s'applique uniquement à Microsoft C♯, et uniquement à la Version 4.0. Je n'ai pas vérifier les versions antérieures de Microsoft C♯, et je n'ai vérifier ECMA/ISO C♯. Aussi, il s'applique uniquement aux C♯, il pourrait y avoir des limites à la CLI.
Et le dernier mais non le moins, il pourrait y avoir la mise en œuvre des limites spécifiques dans Microsoft Visual C♯ et Novell Mono C♯, ainsi la mise en œuvre des limites spécifiques de Microsoft et de Mono implémentations de l'interface CLI (c'est à dire le CLR et le Mono VM).
Cependant, la question était de savoir C♯, et non à une mise en oeuvre particulière de C♯ et non pas de la CLI, donc je me sens assez confiant en affirmant que le nombre d'interfaces une classe peut implémenter est illimitée.
Il y a une limite
Vous êtes limité à 255 comme un seul octet est utilisé comme un indexeur par le JIT pour le type de tableau pour l'interface.