Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LES INTERFACES


Information sur la source

Catégorie :Tutoriaux Source .NET ( DotNet ) Classé sous : interface Niveau : Débutant Date de création : 04/04/2003 Date de mise à jour : 04/04/2003 15:42:27 Vu : 9 285

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

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

  • 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;
  • }
  • }
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;
   }
}
 

Commentaires et avis

signaler à un administrateur
Commentaire de nicolson le 04/04/2003 18:55:21

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... ?

signaler à un administrateur
Commentaire de Kaid le 04/04/2003 20:18:26

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.


signaler à un administrateur
Commentaire de gg00xiv le 04/04/2003 23:02:48

toutes les classes dérivent de Object, pas besoin de le préciser ...
bonne explication : 9/10

signaler à un administrateur
Commentaire de vieuxLion le 08/04/2003 14:54:09

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 ;)

signaler à un administrateur
Commentaire de scoubidou944 le 03/09/2006 16:43:04

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();
}
}

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Implementer une interface COM existante dans un object .NET [ par FrancoisC ] Bonjour,J'essaye d'implémenter une interface COM existantedans un object .NET (UserControl).Mais c'est interface n'est pas accessible par l'objet COM Remplissage de case rien de plus :/ [ par dJe781 ] "Alors là c'est si vous êtes désespéré et au bord du suicide :-)"Ca résume plutôt bien ^^Voilà, j'en suis au stade de vous proposer le défit du siècle interface media player [ par azyous ] qui a une ideé comment faire une interface qui ressemble a media player avec visual c# Interface IDbDataAdapter [ par jacma ] BonjourQuel est l'intérêt d'implémenter l'interface IDbDataAdapter plutôt que de se servir directement de SqlDataAdapter?Merci interface MDI et réduction [ par coq ] bon voilà : quand on reduit une fenetre enfant dans un MDI, il reste une "petite boite" avec la barre de titre et les 3 box de controle (fermer, agran Chat avec interface graphique !!!!!! [ par saku_ ] Salut tout le monde !!!! J'ai réalisé un Chat en C# en mode Console, mon souci est que je n'arrive pas à faire l'interface. Serait il de me donner u Affichage d'une interface au click d'un control TextBox en ASP.NET [ par Alex009 ] BonjourJ'ai un formulaire( xyz.aspx) avec plusieurs controls de textbox qui prendront le detail de chaque article, j'aimerai afficher une interface(ou Interface ? [ par ToshiBaba ] Bonjour,J'ai un souci de conception dans mon projet C#, peut-être que vous pourrez m'aider Ce que je veux faire :une MDI qui instancie quand le besoin créer une interface de dessin [ par godefrw ] Bonjour, je souhaite créer dans mon application, une interface de dessin permettant à l'utilisateur de réaliser des dessin de base: rectangle et rond, Interface de connexion [ par bibicool ] Bonjour à tous,J'utilise CSharp depuis peu, Je développe une application permettant de se connecter à une base de donnée sécurisée par un fichier syst


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.