Qu'est-ce que l'interface en C# avec exemple

โšก Rรฉsumรฉ intelligent

Une interface en C# dรฉfinit une interfacetracL'attribut `t` spรฉcifie les mรฉthodes et propriรฉtรฉs qu'une classe doit implรฉmenter, sans fournir le code lui-mรชme. La classe d'implรฉmentation fournit le comportement concret, permettant un faible couplage et l'hรฉritage multiple entre types non liรฉs.

  • ๐Ÿ”— Avectract: Une interface dรฉclare les signatures des mรฉthodes et des propriรฉtรฉs que chaque classe implรฉmentant l'interface doit dรฉfinir.
  • โœ… Aucune implรฉmentation : Une interface ne contient que des dรฉclarations, c'est donc la classe qui รฉcrit le code de la mรฉthode proprement dite.
  • (I.e. Mot-clรฉ: Le mot-clรฉ `interface` crรฉe le type, et une classe utilise deux points pour l'implรฉmenter.
  • ๐Ÿ”€ Interfaces multiples : Une seule classe peut implรฉmenter plusieurs interfaces, ce qui confรจre ร  C# une forme d'hรฉritage multiple.
  • (I.e. Interface vs ABStracclasse t : Les interfaces dรฉfinissent uniquement le comportement, tandis que les interfaces absoluestracLes classes t peuvent รฉgalement contenir un รฉtat et du code partagรฉs.
  • ๐Ÿค– Aide ร  l'IA : GitHub Copilot fournit des interfaces et des implรฉmentations, et les pipelines ML.NET s'appuient sur des transformateurs basรฉs sur des interfaces.tracts.

Interface en C#

Qu'est-ce qu'Interface en C# ?

An Interface En C#, une classe est utilisรฉe pour dรฉfinir une interface.tracL'interface dรฉfinit les fonctionnalitรฉs qu'une classe doit fournir ร  une application. Elle dรฉfinit les opรฉrations qu'une classe peut effectuer et dรฉclare ses propriรฉtรฉs et mรฉthodes. Il appartient ร  la classe de dรฉfinir prรฉcisรฉment le comportement de chaque mรฉthode.

Regardons un exemple d'interface en changeant les classes dans notre application Console. Notez que nous nโ€™exรฉcuterons pas le code car rien ne peut รชtre exรฉcutรฉ ร  lโ€™aide dโ€™une interface.

Exemple d'interface C#

Crรฉons une classe d'interface. Cette classe s'appellera ยซGuru99Interface. Notre classe principale รฉtendra ensuite l'interface dรฉfinie. Tout le code doit รชtre รฉcrit dans le fichier Program.cs.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 interface IGuru99Interface
 {
  void SetTutorial(int pID, string pName);
  String GetTutorial();
 }

 class Guru99Tutorial : IGuru99Interface
 {
  protected int TutorialID;
  protected string TutorialName;

  public void SetTutorial(int pID, string pName)
  {
   TutorialID = pID;
   TutorialName = pName;
  }

  public String GetTutorial()
  {
   return TutorialName;
  }

  static void Main(string[] args)
  {
   Guru99Tutorial pTutor = new Guru99Tutorial();

   pTutor.SetTutorial(1,".Net by Guru99");

   Console.WriteLine(pTutor.GetTutorial());

   Console.ReadKey();
  }
 }
}

Code Explication:-

Ici, nous expliquons les sections importantes du code

Exemple d'interface C#

  1. Nous dรฉfinissons d'abord une interface appelรฉe ยซGuru99Interface. Notez que le mot-clรฉ ยซ interface ยป est utilisรฉ pour dรฉfinir une interface.
  2. Ensuite, nous dรฉfinissons les mรฉthodes qui seront utilisรฉes par notre interface. Dans ce cas, nous dรฉfinissons les mรชmes mรฉthodes que celles utilisรฉes dans tous les exemples prรฉcรฉdents. Notez qu'une interface dรฉclare simplement les mรฉthodes. Il n'y dรฉfinit pas le code.
  3. Nous faisons ensuite notre GuruLa classe 99Tutorial รฉtend l'interface. C'est ici que nous รฉcrivons le code qui dรฉfinit les diffรฉrentes mรฉthodes dรฉclarรฉes dans l'interface. Ce type de code permet d'obtenir les rรฉsultats suivants :
    • Cela garantit que la classe, Guru99Tutorial ajoute uniquement le code nรฉcessaire aux mรฉthodes ยซ SetTutorial ยป et ยซ GetTutorial ยป, et rien d'autre.
    • Cela garantit รฉgalement que l'interface se comporte comme une interface utilisateur.trac La classe doit se conformer ร  la conventiontract. Donc si le contracSi la commande indique qu'elle devrait comporter deux mรฉthodes appelรฉes ยซ SetTutorial ยป et ยซ GetTutorial ยป, alors elle devrait รชtre conรงue ainsi.

Interface C# vs Abstract Classe

Une question frรฉquente chez les dรฉbutants est de savoir en quoi une interface C# diffรจre d'une interface de type `interface`. Abdostracclasse TLes deux dรฉfinissent une contracd'autres types suivent, mais ils servent des objectifs de conception diffรฉrents.

Les principales diffรฉrences sont รฉnumรฉrรฉes ci-dessous :

  • Mise en ล“uvre: Une interface ne contient que des dรฉclarations, tandis qu'une interface absoluetracLa classe T peut fournir ร  la fois des abstracmembres t et mรฉthodes entiรจrement implรฉmentรฉes.
  • Hรฉritage multiple : Une classe peut implรฉmenter plusieurs interfaces mais ne peut hรฉriter que d'une seule interface absolue.tracclasse t.
  • ร‰tat: Un abdostracUne classe T peut contenir des champs, des constructeurs et des propriรฉtรฉs avec des donnรฉes, tandis qu'une interface ne peut pas stocker d'รฉtat d'instance.
  • Modificateurs d'accรจs : AbdostracLes membres de la classe t peuvent รชtre publics, protรฉgรฉs ou privรฉs, tandis que les membres d'interface classiques sont implicitement publics.
  • Cas d'utilisation: Utilisez une interface pour ajouter une fonctionnalitรฉ ร  des types non liรฉs, et une valeur absoluetracLa classe t permet de partager du code commun entre des types รฉtroitement liรฉs.

En bref, une interface dรฉcrit ce qu'une classe peut faire, tandis qu'une classe absoluetracLa classe t peut รฉgalement dรฉfinir une partie de la maniรจre dont cela est fait.

Comment implรฉmenter plusieurs interfaces en C#

Contrairement ร  l'hรฉritage de classes, C# permet ร  une mรชme classe d'implรฉmenter plusieurs interfaces. C'est ainsi que le langage offre une forme sรปre d'hรฉritage multiple, sans l'ambiguรฏtรฉ qui rรฉsulte de l'hรฉritage simultanรฉ de plusieurs classes de base.

Pour implรฉmenter plusieurs interfaces, listez-les aprรจs le nom de la classe et sรฉparez-les par une virgule. La classe doit ensuite dรฉfinir chaque mรฉthode dรฉclarรฉe dans chaque interface qu'elle implรฉmente.

ร‰tape 1) Dรฉclarez deux interfaces, chacune avec sa propre mรฉthode.

ร‰tape 2) Crรฉez une classe qui implรฉmente les deux interfaces, en sรฉparant les noms des interfaces par une virgule.

ร‰tape 3) Fournissez un corps de mรฉthode pour chaque membre dรฉclarรฉ dans chaque interface.

L'exemple ci-dessous montre une classe Document qui implรฉmente ร  la fois une interface utilisateur et une interface graphique.Readable et une interface IWritable.

using System;
namespace DemoApplication
{
 interface IReadable
 {
  void Read();
 }
 interface IWritable
 {
  void Write();
 }
 class Document : IReadable, IWritable
 {
  public void Read()
  {
   Console.WriteLine("Reading the document");
  }
  public void Write()
  {
   Console.WriteLine("Writing to the document");
  }
  static void Main(string[] args)
  {
   Document doc = new Document();
   doc.Read();
   doc.Write();
   Console.ReadKey();
  }
 }
}

Code Explication:-

  1. Nous dรฉclarons deux interfaces, IReadable et IWritable. Chaque interface dรฉclare une seule mรฉthode sans corps.
  2. La classe Document liste les deux interfaces aprรจs les deux-points, sรฉparรฉes par une virgule, acceptant ainsi de respecter les deux.tracts.
  3. La classe dรฉfinit ensuite les mรฉthodes Read et Write. Ignorerping L'une ou l'autre mรฉthode provoquerait une erreur de compilation.
  4. La mรฉthode Main crรฉe un objet Document et appelle les deux mรฉthodes, prouvant ainsi que la classe satisfait aux deux interfaces.

Lorsque le programme s'exรฉcute, il imprime Lecture du document sur la premiรจre ligne et Rรฉdiger le document sur la deuxiรจme ligne. Ce motif conserve chaque contracElle est petite et ciblรฉe, ce qui rend la classe Document plus facile ร  tester et ร  รฉtendre.

Avantages de l'utilisation des interfaces en C#

Les interfaces sont largement utilisรฉes dans les projets C# professionnels car elles rendent le code flexible et plus facile ร  maintenir. Elles permettent de programmer selon une approche conventionnelle.tract plutรดt que dans une classe concrรจte.

Les principaux avantages comprennent:

  • Couplage lรขche: Code Cela dรฉpend de l'interface, et non d'une classe spรฉcifique ; une implรฉmentation peut donc changer sans perturber les appelants.
  • Hรฉritage multiple : Une classe peut hรฉriter du comportement de plusieurs interfaces, ce que l'hรฉritage de classe classique ne permet pas.
  • Testabilitรฉ : Les interfaces simplifient le remplacement d'une classe rรฉelle par un objet factice lors des tests unitaires.
  • Injection de dรฉpendances : Les frameworks injectent une implรฉmentation d'interface au moment de l'exรฉcution, une idรฉe centrale des principes SOLID.
  • Cohรฉrence: Chaque classe d'implรฉmentation est obligรฉe de fournir le mรชme ensemble de membres, ce qui garantit la prรฉvisibilitรฉ de l'API.

Grรขce ร  ces avantages, les interfaces sont au cล“ur de la plupart des modรจles de conception et des frameworks d'applications C# modernes.

FAQ

Par convention, le nom d'une interface C# commence par la lettre I majuscule, comme IDisposable ou IReadableLe prรฉfixe ยซ I ยป indique immรฉdiatement que le type est une interface plutรดt qu'une classe ou une structure.

Avant C# 8.0, une interface ne contenait que des dรฉclarations. ร€ partir de C# 8.0, les mรฉthodes d'interface par dรฉfaut permettent ร  une interface de fournir un corps de mรฉthode, ce qui garantit la compatibilitรฉ des anciennes implรฉmentations mรชme avec l'ajout de nouveaux membres.

L'implรฉmentation explicite nomme un membre avec son prรฉfixe d'interface, tel que IReadable.Read. Le membre n'est alors appelable que par le biais d'une rรฉfรฉrence d'interface, ce qui รฉvite les conflits de noms lorsque deux interfaces dรฉclarent la mรชme mรฉthode.

Oui. Une interface peut hรฉriter d'une ou plusieurs autres interfaces. Une classe qui implรฉmente l'interface enfant doit alors dรฉfinir toutes les mรฉthodes de l'interface enfant et de toutes les interfaces parentes hรฉritรฉes.

Non. Une interface ne peut pas รชtre instanciรฉe directement car elle ne possรจde pas d'implรฉmentation. Vous crรฉez un objet d'une classe qui implรฉmente l'interface, puis vous rรฉfรฉrencez cet objet via le type de l'interface.

Oui. Les membres d'une interface classique sont implicitement publics et il est impossible de leur ajouter des modificateurs d'accรจs. La classe implรฉmentant l'interface doit รฉgalement dรฉclarer les membres correspondants comme publics.

Oui. GitHub Copilot peut gรฉnรฉrer la structure d'une interface, suggรฉrer les signatures de ses mรฉthodes et crรฉer une classe qui l'implรฉmente ร  partir d'un court commentaire ou du nom de l'interface, ce qui accรฉlรจre le dรฉveloppement.tract-premier dรฉveloppement.

ML.NET s'appuie sur des interfaces telles que ITransformer et IDataView pour dรฉfinir son pipeline d'apprentissage automatique. Le codage en fonction de ces interfacestracts vous permet de changer de modรจles et de sources de donnรฉes sans rรฉรฉcrire le code d'entraรฎnement environnant.

Rรฉsumez cet article avec :