Permalänk
Medlem

C# Interfaces

Jag har fastnad lite vad det gäller mitt lärande av C#. Jag försöker förstå vad interfaces är bra för men jag fattar inte, det är som en class fast utan någon som helst funktionalitet. Har inte förstått förklaringarna när jag googlade så förklara som om jag vore en 5-åring.

Permalänk
Hedersmedlem

Teorin är väl ofta att det kan vara nyttigt att tala om mera generella objekttyper (utan att bry sig om hur de fungerar). Ungefär som när man kan förbjuda motorfordon utan att behöva beskriva alla sådana kan man till exempel förutsätta att man kan köra ForEach på ett objekt som klassas som IEnumerable.

Permalänk
Medlem

Interface ger dig möjligheten att dynamiskt invokera metoder på objekt av olika klasser, de som implementerar interfacet.
Ett snabbt exempelt kopplat till verkligheten. Biltillverkare gör bilar på olika sätt, med olika egenskaper, gemensamt för alla bilar är däremot att det kan gasa, bromsa och svänga. Alla bilar kommer lyda interfacet "Bil" med metoderna gasa() bromsa() och sväng(riktning), typ så. På så sätt kommer DU aldrig behöver veta vilken bil det är du skall styra om du använder dem via deras Interface. Dvs du kan ha en Ford, en BMW och en Fiat. Alla beter sig olika men kommer att kunna användas som en bil av dig.
Om någon vill göra en ny sorts bil så behöver man endast se till att implementera det metoder som anges i Interfacet så kan vem som helst använde den som en bil^^

Bara tog detta som random exempel

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem

Interfaces är väldigt användbara. De är, precis som du säger, som en klass utan funktionalitet och liknar abstrakta klasser så till vida att de måste implementeras i konkret form för att kunna användas.

Ett interface fungerar som ett kontrakt: när en konkret (dvs. icke abstrakt) klass implementerar ett eller flera interfaces garanteras samtidigt att klassen har de metoder som finns angivna i interfacet. Att man kan implementera flera interfaces i en klass är också väldigt användbart.

Ett exempel är på sin plats. Säg att vi har definierat ett interface som har en metod format, som tar en sträng som argument och returnerar en sträng:

interface IFormattable { string Format(string text); }

Vi kan nu implementera en klass som använder sig av interfacet på godtyckligt sätt:

class StringReverser : IFormattable { public string Format(string text) { return text.Reverse(); } }

Vi kan ha flera liknande klasser som implementerar IFormattable helt olika. Dessa klasser har iom interfacet en gemensam nämnare: metoden Format. Vi kan exempelvis skapa en lista av IFormattable och lägga till olika klasser som delar detta interface, och sedan anropa Format på dem:

List<IFormattable> foo = new List<IFormattable>(); foo.Add(new StringReverser()); foo.Add(new StringUpperCaser()); // osv ... string text = "jag gillar glass"; foreach (IFormattable item in foo) { Console.WriteLine(item.Format(text)); }

Skickades från m.sweclockers.com

Visa signatur

Kom-pa-TI-bilitet