- Interfaces (Schnittstellen) beschreiben Verhaltensweisen von unabhängigen Objekten (Klassen)
- implementieren abstrakte, schreibgeschützte Methoden, Eigenschaften und Indexer
using System;
using System.Text;
using System.Management;
using System.Collections.Generic;
// einen Motor definieren
public interface IMotor
{
int Drehzahl
{
get;
}
}
// einen Display definieren
public interface IDisplay
{
int Helligkeit
{
get;
}
}
// einen Schalter definieren
public interface ISchalter
{
bool Status
{
get;
}
}
// Maschine besteht mindestens aus einem Motor und einem Schalter
public interface IMaschine : IMotor, ISchalter
{
void An();
void Aus();
int Gewicht
{
get;
}
string Name
{
get;
}
}
// Maschine ohne Display, nur mit Motor und Schalter
public class KleineMaschine : IMaschine
{
private int iMotorDrehzahl = 0; // Motordrehzahl
private int iGewicht = 100; // Gewicht
private bool bStatus = false; // Schalterstatus
private string sName = "-"; // Name der Maschine
// Konstruktor
public KleineMaschine(string sBezeichner)
{
sName = sBezeichner;
}
// Implementation der im Interface IMotor deklarierten Drehzahl
public int Drehzahl
{
get
{
return iMotorDrehzahl;
}
set
{
iMotorDrehzahl = value;
}
}
// Implementation der im Interface ISchalter deklarierten Schalterstellung
public bool Status
{
get
{
return bStatus;
}
set
{
bStatus = value;
}
}
// Implementation des im Interface IMaschine deklarierten Gewichts
public int Gewicht
{
get
{
return iGewicht;
}
set
{
iGewicht = value;
}
}
// Implementation des im Interface IMaschine deklarierten Namens
public string Name
{
get
{
return sName;
}
set
{
sName = value;
}
}
// Implementation der im Interface IMaschine deklarierten Funktion
public void An()
{
Console.WriteLine("{0} ist an, Drehzahl = {1}.", sName, iMotorDrehzahl);
}
// Implementation der im Interface IMaschine deklarierten Funktion
public void Aus()
{
Console.WriteLine("{0} ist aus.", sName);
}
}
// neuen Maschinentyp, abgeleitet von KleineMaschine mit einem zus. Display
public class GrosseMaschine : KleineMaschine, IDisplay
{
private int iDisplayHelligkeit = 0;
// Konstruktor der Klasse, ruft den Konstruktor von der Basisklasse "KleineMaschine" auf
public GrosseMaschine(string sBezeichner)
: base(sBezeichner)
{
}
// Implementation der im Interface IDisplay deklarierten Displayhelligkeit
public int Helligkeit
{
get
{
return iDisplayHelligkeit;
}
set
{
iDisplayHelligkeit = value;
}
}
}
class Program
{
static void Main(string[] args)
{
// Liste mit Maschinen
List<IMaschine> MaschinenListe = new List<IMaschine>();
// kleine Maschine erzeugen (Motor + Schalter)
KleineMaschine KM = new KleineMaschine("kleine Maschine");
KM.Gewicht = 100;
KM.Drehzahl = 100;
KM.Status = true;
MaschinenListe.Add(KM);
// große Maschine erzeugen (Motor, Schalter, Display)
GrosseMaschine GM = new GrosseMaschine("große Maschine");
GM.Gewicht = 200;
GM.Drehzahl = 1000;
GM.Helligkeit = 80;
GM.Status = true;
MaschinenListe.Add(GM);
// Liste durchgehen, Objekte wieder herausholen und Möglichkeiten austesten
foreach (IMaschine ma in MaschinenListe)
{
Console.WriteLine(ma.Name + " ist vom Typ " + ma.GetType().ToString());
Console.WriteLine("Gewicht: {0}kg", ma.Gewicht);
ma.An();
// Beispiel: Typ der Maschine ermitteln
if (ma.GetType() == typeof(KleineMaschine))
{
}
// Beispiel: Objekt mit "as" interpretieren
GrosseMaschine gmObj = ma as GrosseMaschine;
// wenn sich das Obj. als große Maschine interpretieren lässt,
// dann besitzt es auch eine Eigenschaft Displayhelligkeit
if (gmObj != null)
{
Console.WriteLine("Die Maschine hat ein Display mit der Helligkeit: {0}", gmObj.Helligkeit);
}
// prüfen, ob das Objekt verschiedene Interfaces implementiert
IMotor iM = ma as IMotor;
if (iM != null)
{
Console.WriteLine("Die Maschine implementiert das Interface IMotor");
}
IDisplay iD = ma as IDisplay;
if (iD != null)
{
Console.WriteLine("Die Maschine implementiert das Interface IDisplay");
}
ISchalter iS = ma as ISchalter;
if (iS != null)
{
Console.WriteLine("Die Maschine implementiert das Interface ISchalter");
}
ma.Aus();
}
Console.ReadLine();
}
}