Classe vs Interface

voix
2

On m'a demandé récemment dans une interview que, une interface peut être considérée comme une classe en C #? IE est une interface est une classe en C #?

J'étais confus.

Que peut-être la réponse?

Créé 27/08/2009 à 02:31
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
8

Non, une interface est pas une classe.

Une interface est un ensemble de signatures de méthode et peut-être des propriétés qui se rapportent tous à une seule idée. Par exemple, l'interface IList aura des méthodes pour l'indexation, l'insertion, et d'obtenir le nombre d'éléments. Cependant, il ne définit pas les détails de mise en œuvre. L'interface de liste pourrait être mis en œuvre comme une liste chaînée ou un tableau enveloppé, ou tout ce que vous voulez, tant qu'il définit les méthodes de l'interface.

Une classe est le modèle à partir duquel créer un objet réel. Les classes sont une collection de signatures de méthode, ainsi que les mises en œuvre de ces méthodes.

Donc non, une interface est pas une classe, car il définit simplement un contrat spécifique, alors qu'une classe définit tout le comportement de l'objet.

Ommenter SquareCog souligne avec précision que ce qui précède n'est pas tout à fait vrai. Les classes peuvent être sous-et méthodes surchargées, à la classe relation avec le comportement réel d'un objet devient un peu plus compliqué. Je vais juste handwave ce problème loin en disant que les classes sont des entités individuelles. Vous pouvez lire le code source d'une classe et de savoir ce que le comportement de cette classe comprend. Cependant, lors de l'exécution, les objets ont des types au lieu de classes. Les types sont l'arbre d'héritage entier, au lieu d'une classe unique, et donc pourrait être défini le comportement d'un type sur plusieurs classes différentes. Heureusement, cela ne change pas la différence conceptuelle de base que les interfaces sont des contrats qui peuvent impliquer (les noms, les types d'arguments, etc.) certaines mises en oeuvre, mais ne peut pas appliquer quoi que ce soit, mais les signatures de méthode,

Créé 27/08/2009 à 02:37
source utilisateur

voix
3

Du point de vue logique, ils sont très similaires. Comme il est indiqué par d' autres, un ABC 1 avec seulement les membres abstraits du public servirait presque le même but que d' une interface.

Lorsque vous descendez aux écrous et boulons de celui-ci, les deux ont un certain nombre de différences importantes.

  • Une classe ne peut hériter d'une classe de base, mais peut mettre en œuvre de nombreuses interfaces.
  • Un type de valeur, qui résultent déjà ValueType, ne peut pas hériter d'un ABC, mais peut implémenter une interface.
  • Une classe peut contenir des champs et des membres statiques. Une interface ne peut pas.
  • Une classe peut contenir la mise en œuvre, une interface ne peut pas.
  • Une classe peut avoir des membres et privés protégés, une interface ne peut pas.
  • Résumé des membres d'un ABC sont toujours virtuel. Une classe peut implémenter une interface avec les membres non virtuels.

1: Classe abstraite de base

Créé 27/08/2009 à 02:48
source utilisateur

voix
2

Une interface Java est pas une classe; il est une déclaration de méthodes qui doivent être mises en œuvre par les classes; une description des capacités, si vous voulez. Les classes abstraites en Java sont un point à mi-chemin intéressant entre les classes appropriées et les interfaces, car ils définissent les méthodes disponibles, mais fournissent également des implémentations par défaut.

La différence fondamentale entre une classe abstraite et une interface en Java est que vous ne pouvez étendre une classe; vous pouvez implémenter plusieurs interfaces. Une classe abstraite décrit ce que vous êtes; une interface décrit ce que vous pouvez faire . Ce que vous définit aussi ce que vous pouvez faire - mais il a un sens beaucoup plus fort.

Créé 27/08/2009 à 02:36
source utilisateur

voix
2

Oui, une classe abstraite qui ne contient pas la mise en œuvre et se compose de méthodes abstraites ne serait équivalent à l'interface.

Créé 27/08/2009 à 02:34
source utilisateur

voix
1

En général, une interface est un type qui peut être mis en œuvre par une classe pour indiquer que la classe expose un comportement à travers un ensemble de méthodes. Par exemple, .Net a une ICollectioninterface qui contient des méthodes pour interagir avec une collection.


En C ++, une interface est une classe où chaque méthode est abstraite.

En Java et .Net, les interfaces sont des types indépendants qui ne sont pas liés à des classes.

De toute façon, les classes peuvent mettre en œuvre des interfaces.

Créé 27/08/2009 à 02:37
source utilisateur

voix
1

Il pourrait y avoir plusieurs réponses.

Non, une classe n'est pas une interface - une interface définit un contrat, une classe est un type d'objet qui peut être créé.

Oui, une interface peut être considérée comme une classe de base avec seulement des méthodes virtuelles - c'est ainsi que les interfaces sont définies en C ++.

Créé 27/08/2009 à 02:34
source utilisateur

voix
0

Il est utile de considérer .net comme ayant trois types « sûrs » de types en .net: interfaces, classes et types de valeur (il y a aussi des choses comme des pointeurs et autres, mais ce sont une autre histoire), et trois principaux contextes classes peuvent être utilisés: des emplacements de stockage, objets tas et des contraintes génériques.

objets monceau être de tout type, mais tous les objets tas comportent comme des objets de classe. objets tas de type d'interface sont rares; ils ne sont généralement pas créés dans .net mais peuvent être créés par un code conçu pour fonctionner avec des modèles d'objets anciens. objets tas de types de classes contiennent un emplacement de stockage pour chaque champ; objets tas de types de valeurs contiennent un emplacement de mémoire dont le type est le type de valeur en question.

Les emplacements de stockage peuvent également être de tout type, mais des emplacements de stockage de valeurs de type différent des autres. Un emplacement de stockage de type de classe ou d'un type d'interface contient une référence de classe. Un emplacement de stockage de valeurs de type contient soit une valeur primitive (octet, nombre entier, char, nombre à virgule flottante, etc.) ou bien contient un emplacement de stockage pour chaque champ du type de valeur (ainsi, par exemple, un emplacement de stockage de type Pointcales deux emplacements de stockage de type Int32, dont chacun abrite une primitive signé 32 bits entier).

Contraintes génériques peuvent également être de tout type, mais les contraintes de types d'interface ne limite pas le paramètre de type générique contraint lui - même comme étant un type de classe, type d'interface, ou le type de valeur. Procédé déclaré void Foo<T>(T param) where T:IWowzopourrait être appelé avec un paramètre de type de classe, le type d'interface, ou le type de valeur. Si la routine est appelée avec un paramètre de type valeur, alors paramet tout autre lieu de stockage déclarés être de type Tseront stockées sous forme de types de valeur. Si la routine est appelée avec un paramètre de type de classe ou de type entier, alors paramet tout autre lieu de stockage déclarés être de type Tseront stockées sous forme de références de classe. Il est important de noter que si Tlui - même est un type d'interface ( IWozoou un dérivé) , puis paramsera transmis comme une référence à un objet tas, et se comportera comme un indépendamment du fait que le type de l'instance d'objet est un objet de classe ou le type de valeur. Si struct Barmet en œuvre IWowzo, et myBarest une variable de type Bar, appelant Foo<Bar>(myBar)peut donner une sémantique différente de Foo<IWowzo>(myBar); dans le premier cas, le paramètre se comporte comme un type de valeur et dans ce dernier cas , il se comporte comme un type de classe.

Créé 09/07/2012 à 19:44
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more