| |
- 3 -
Vereinigungstypen
Weiterhin ist es in C# möglich, Vereiniguntstypen (union) mit Hilfe der strukturierten
Typen zu emulieren. Dieses ist jedoch nicht so einfach, wie es z. B. in Pascal der Fall
ist. Es müssen dazu nämlich spezielle Compiler-Attribute gesetzt werden, wo die Posi-
tion der einzelnen Werte im Speicher manuell gesetzt wird. Hierbei muß weiterhin an-
gemerkt werden, dass es sich bei Vereinigungstypen nicht um einen eigenständigen Da-
tentyp in C# handelt, sondern die Möglichkeit der Konstruktion von Unions nur dafür
gedacht ist, die Kompatibilität zu Funktionen und Methoden zu gewährleisten, die einen
Union-Typ als Parameter erwarten. Dies ist üblicherweise nur dann der Fall, falls es
sich bei der Methode, die aufgerufen werden soll, um die Methode eines entfernten Ob-
jekts handelt, also im Fall einer verteilten Applikation.
Aufgrund dieses nur zu Kompatibilitätszwecken verwendbaren Datentyps gestaltet sich
der Umgang damit auch äußerst umständlich, wie folgendes Beispiel verdeutlicht:
[StructLayout(LayoutKind.Explicit)] //Compileranweisung
struct Union{
//FallA und FallB auf die gleiche Speicheradresse setzen
[FieldOffset(0)] public int FallA;
[FieldOffset(0)] public int FallB;
}
//Aufruf in Methode
Union myUnion = new Union();
myUnion.FallA = 5;
myUnion.FallB = 6:
Console.WriteLine(myUnion.FallA); //liefert 6
Delegates
Bei einem Delegate handelt es sich um eine Art Variable für Methoden. Das heißt, dass
in einem Delegate die Signatur einer Methode festgelegt wird (Parameter, Rückgabe-
wert usw.), und dann eine beliebige Methode, die diese Signatur erfüllt, dem Delegate
zugewiesen werden kann. Ein Aufruf des Delegate delegiert dann die Parameter an die
Methode weiter, die ihm zugewiesen wurde. Dazu folgendes Beispiel:
public delegate void delegiere(string text);
public void schreibeAusgabe(string ausgabe){
}
delegiere myDelegate = new delegiere(schreibeAusgabe);
myDelegate(Hallo Welt!); //delegiere Ausgabe
Üblicherweise wird ein Delegate aber dazu verwendet, um call-backs zu realisieren.
Dabei wird einer Methode ein Delegate, ein Funktionszeiger sozusagen, übergeben.
Nachdem die Methode ihre Anweisungen abgearbeitet hat, ruft sie die via Delegate ü-
|  |
|
| |
|
|