Les interfaces

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 290 fois - Téléchargée 30 fois

Contenu du snippet

Les interfaces servent à obliger les classes qui les implémentent a redéfinir leurs méthodes.
Le nombre d'interfaces que peut implémenter une classe est illimité, contrairement aux classes abstraites.

Source / Exemple :


using System;

class ClassePrincipale : Object
{
   public static void Main()  //Point d'entré du programme.
   {
      Classe1 test=new Classe1();
      
      
      /*

    • On utilise un handle d'interface
    • seulement pour accéder a ses membres.
  • /
ITest itest; //Indispensable pour accéder a la méthode FonctionC() //de ITest. ITest2 itest2; //Indispensable pour accéder a la méthode FonctionC() //de ITest2. itest=test; Console.Out.WriteLine( itest.FonctionC(true,true) ); itest2=test; Console.Out.WriteLine( itest2.FonctionC(true,true) ); } } /*
    • Pour repérer facilement une interface on ajoute un I
    • comme préfixe.
  • /
interface ITest { void FonctionA(); int FonctionB(int a); bool FonctionC(bool a,bool b); } interface ITest2 { bool FonctionC(bool a,bool b); } //La classe mère suivit des deux interfaces (toujours dans cet ordre). class Classe1 : Object,ITest,ITest2 { public void FonctionA() { } public int FonctionB(int a) { return 1; } bool ITest.FonctionC(bool a,bool b) { Console.Out.WriteLine("FonctionC() de l'interface ITest : "); return true; } bool ITest2.FonctionC(bool a,bool b) { Console.Out.WriteLine("FonctionC() de l'interface ITest2 : "); return false; } }

A voir également

Ajouter un commentaire

Commentaires

Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

Et maintenant si la Classe1 est une classe abstraite, on fait comment dans le cas suivant :

internal interface IDuplicable
{
Classe1 Duplicate ();
}

public abstract class Classe1 : IDuplicable
{
// ERROR, Le compilo demande l'implementation de Duplicate
// sauf que l'on ne peut pas faire un new Classe1()
}

public class Classe2 : Classe1
{
public Classe1 Duplicate ()
{
return new Classe2();
}
}
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
Ce que tu explique est un cas très particulier de l'utilisation des interfaces. C'est une construction inventée par ce langage C# qui s'appelle IMPLEMENTATION EXPLICITE DES INTERFACES.
La technique normale reste de définir une interface et de l'implémenter simplement (sans préfixer le nom de la fonction par le nom de l'interface)
A quoi sert cette nouvelle technique ? A traiter le cas où une même classe désire implémenter deux interfaces dont les noms de fonction entrent en collision (identiques) TOUT EN AYANT UNE SEMANTIQUE DISTINCTE (sinon une seule implémentation suffit)
C'est bien le cas que tu présente mais il aurait mieux valu l'annoncer
Encore une remarque : Pourquoi est il nécessaire d'avoir une référence du type de l'interface (et non pas du type de la classe) pour appeler les méthodes => car le compilateur ne saurait pas quelle implémentation prendre parmi les deux
Sinon, c'est bien fait ;)
Messages postés
656
Date d'inscription
mercredi 22 août 2001
Statut
Membre
Dernière intervention
11 mars 2005
13
toutes les classes dérivent de Object, pas besoin de le préciser ...
bonne explication : 9/10
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Comme l'a expliqué DarkDaemon, les interfaces c'est très proche de l'héritage entre les classes. En C# ou en JAVA, où l'héritage multiple n'existe pas (contrairement au C++), si tu veux que ta classe fille dérive de deux ou n classes mères, il faut que tes classes mères soient des interfaces.

Mais en fait les interfaces servent plutôt à dire: "j'ai un concept applicable à une classe, je définis ce concept dans une interface. Si une classe implémente (terme JAVA) cette interface, alors la classe implémente le concept". Un exemple: une interface pour la sérialisation, si tu implémentes cette interface alors ta classe est sérialisable. Et comme expliqué précédemment, il est possible de cumuler les interfaces donc les concepts attachés.
Messages postés
29
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
28 janvier 2004
1
Ouais c'est cool, j'ai bien compris comment ça marchait (simple et clair) : 9/10
Mais par contre j'ai pas compris à quoi ça servait vraiment... Pourquoi ne pas créer directement un objet Class1 test et faire un test.Fonction... ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.