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