Avatar billede clausjul Nybegynder
12. juli 2005 - 13:53 Der er 10 kommentarer og
1 løsning

Hvad er interfaces?

Jeg har dælme svært ved at forstå, hvad en interface er. Det ser ud som om at en interface indeholder metoder, som så kan arves ned til en klasse eller hvad?
Avatar billede foxmulder58 Praktikant
12. juli 2005 - 13:57 #1
jeg fandt denne definition på google:

"The point of meeting between a computer and an external entity, whether an operator, a peripheral device or a communications medium. An interface may be physical, involving a connector, or logical, involving software."


mvh
mads
Avatar billede nva Praktikant
12. juli 2005 - 13:58 #2
Avatar billede clausjul Nybegynder
12. juli 2005 - 14:01 #3
Jeg snakker ikke om fysiske interfaces men interfaces i C#. Har allerede været inde på den side i codesource.net uden at have forstået noget som helst :_(
Avatar billede roenving Novice
12. juli 2005 - 14:06 #4
Interfaces er definitioner af nogle minimums-betingelser, som en klasse skal overholde for at kunne bruges til noget bestemt ...

-- f.eks. skal en klasse, for at kunne bruge foreach-operatoren, indeholde nogle helt bestemte metoder og properties, hvilket gøres ved at arve : IEnumerable ind i klassen ...
Avatar billede driis Nybegynder
12. juli 2005 - 14:07 #5
Et interface definerer en grænseflade, men ikke implementationen af denne grænseflade. Eksempel:

public interface IFoo
{
  void FooMethod();
}

En klasse kan så arve interfacet; hvilket betyder at den skal implementere metoden FooMethod:

public class FooClass1 : IFoo
{
  void FooMethod()
  {
    // do stuff
  }
}

Man siger at FooClass1 implementerer interfacet IFoo.
Avatar billede nva Praktikant
12. juli 2005 - 14:10 #6
Interface
Et interface har syntaks som likner på en abstrakt klasse uten implementasjon av kode, men bare deklarasjoner. Deklarasjon av en metode kan f.eks være slik:


      int CompareObject(object obj1, object obj2);


kalles også for operasjon (operation). Et interface kan altså sammenliknes med en abstract klasse som bare inneholder operasjoner, men syntaksen er forskjellig:


              interface IComp
      {
            int CompareObject(object obj1, object obj2);
      }


Legg merke til deklarasjonen  interface, og at navnet på interface'et begynner med bokstaven  "I".  Interface operasjoner er implisitt deklarert  public, og det er forbudt å deklarer slike operasjoner som public.
              E t interface arves (implementeres), og subklassen må da implementere programkoden i metodene:



              interface IComp
      {
            int CompareObject(object obj1, object obj2);
      }


      class Token : IComp
      {
            public virtual int CompareObject(
                                  object obj1, object obj2)
            {
            .... //implementere kode her
            }
      }


Et interface spesifiserer en operasjon som kan gjøres, og  subklassen som arver interface'et spesifiserer hvordan operasjonen gjøres. La oss ta et eksempel. Sett at en applikasjon skal prosessere lister med forskjellige objekter som skal sorteres. La oss tenke oss der fins tre typer lister, en liste med heltall, en liste med tegnstrenger, og en liste med byer. Vi  lager da en klasse med en metode som sorterer heltall, en klasse som sorterer strenger og en klasse som sorterer byer. Disse klassene trenger åpenbart en metode CompareObject som sammenligner to objekter og avgjør hvilket som er større enn, lik, eller mindre enn.  Metoden brukes sorteringsalgoritmen på samme måte for alle klassene. Vi kan da implementere et interface med metoden CompareObject  i klassene, og la hver klasse ha sin egen implementasjon av koden for interface'et.  Kodeimplementasjonen avgjør hvordan sammenligningen skal gjøres, f.eks

·        listen med heltall sorteres etter tallverdiene

·        listen med tegnstrenger sorteres etter ASCII verdier, der vi må justere for æ, ø og å.

·        listen med byer sorteres etter antall innbyggere (som leses fra en database)

På denne måten blir sorteringsalgoritmen identisk lik for alle tre klassene, alle tre bruker CompareObject.  Hvordan sammenligningen gjøres  er kodet i interface implementasjonen i hver klasse. Operasjonen CompareObject blir således gjort uavhengig av måten å gjøre den på, vi kan altså sortere listene uten bry oss med hvordan sammenligninger av to objekter i en liste gjøres. Og her er poenget med å bruke interface, en operasjon gjøres uavhengig av måten å gjøre den på. Interface er en høyt verdsatt del av C#.

Taget herfra: http://olga.hials.no/webapp/CSharp.aspx
Avatar billede driis Nybegynder
12. juli 2005 - 14:11 #7
Interfaces anvendes bl.a. til at lave polymorfi; eller til at angive at en klasse overholder en grænseflade, hvilket gør at den kan bruges til et-eller-andet.

Eksempelvis implementerer mange .NET klasser interfacet IEnumerable, hvilket betyder at det er muligt at enumerere henover objekter i klassen. Det er f.eks. det foreach konstruktionen udnytter.
Avatar billede iluka Nybegynder
13. juli 2005 - 17:23 #8
interfaces definerer en grænseflade for en klasse. Der er mange anvendelse for interfaces, prøv at se her:

interface myInterface
{
}

class myClass1 : myInterface
{
/// din kode her
}

class myClass2 : myInterface
{
/// din kode her
}

class myClass3
{
  public myClass3()
  {
  myInterface[] liste = new myInterface[10];
  liste[0] = new myClass1();
  liste[1] = new myClass2();
  }
}

Her anvendes et interface, til at putte forskellige ting i et og samme array. Det kan også laves med arv, og man kan for så vidt bare lave et object array istedet. De problemer der kan løses med interfaces kan typisk også løses uden, men er ofte mere elegante når de bliver løst med interfaces.
Avatar billede lanstorp Nybegynder
20. juli 2005 - 15:19 #9
Fidusen ved interfaces er at de dekobler ens design, så det bliver nemt at ændre dvs. fleksibelt.

En klientklasse der skal bruge en funktionalitet kan bruge den fra en serviceklasse igennem et interface (som serviceklassen implementere). Man kan så bruge alle de serviceklasser der implementere pågældende interface igennem samme interface..........

Jeg har skrevet en artikel der skære det mere ud på:
http://www.codeproject.com/csharp/InterfaceConstruct.asp
Avatar billede clausjul Nybegynder
26. april 2008 - 08:44 #10
Hvis der er nogen som vil have points, så læg et svar her ;-)
Avatar billede clausjul Nybegynder
23. december 2008 - 10:51 #11
Ingen lagde et svar, så jeg lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester