lukaspojken skrev:
Det känns som att ett interface kan väl inte bara lösa det.
Nja... Interface i sig kan inte lösa det till dig. Ett interface är som ett kontrakt. Alltså en specifikation på saker som din klass "lovar" att du kan kalla på, du kan dock aldrig vara säker på att saker och ting verkligen fungerar som interface säger, eftersom det är klassen i sig som bestämmer vad interfacet skall göra!!! Komplicerat?
Här kommer ett lite exempel:
Säg att jag har ett Interface som jag kallar IFordon, där jag säger att det finns 2 saker som ett IFordon kan göra.
1. Kör
2. Stanna.
Då kan mitt interface se ut så här:
public interface IFordon{
void Kör();
void Stanna();
}
Här är nu ett kontrakt som säger att alla klasser som implementerar mitt interface måste ha dessa 2 funktioner, vad som verkligen händer i dessa funktioner kan inte mitt interface styra.
Så här kommer 2 helt "korrekta" implementeringar av interfacet IFordon.
public class Bil : IFordon{
public void Kör(){
//-- implementerar kod för att köra bilen framåt.
}
public void Stanna(){
//-- implementerar kod för att stanna bilen om den kör.
}
}
public class Lastbil() : IFordon {
public void Kör(){
//-- implementerar kod för att tuta
}
public void Stanna(){
//-- implementerar kod för att koppla loss släpvagnen
}
}
ovanståend kod är helt legitimt och kompilatorn kommer inte ge dig ett fel, men om du säger till klassen att implementera IFordon så måste du implementerar dessa 2 metoder annars så får du fel, så du kan vara säker på att alla klasser som har interfacet IFordon verkligen har dessa 2 metoder, men du kan inte vara säker på vad de gör.
Och här ligger styrkan och svagheten med interfacet, du kan alltså göra olika saker i dessa 2 metoder beroende på vilken klass du är i.
Så i ditt exempel så får metoden Validate() i person inte samma kod som för klassen order, eftersom de inte har samma properties, men båda metoderna gör det du vill att de skall göra, validerar objektet.
- M