Zertifikats-Vorbereitung – MCTS 70-536
In dieser Übung geht es um einen groben Überblick in der Thematik “Klassen” in .NET
MCTS 70-536 Lession 3 – Klassen
- Klassen sind benutzerdefinierte Typen
- Diese können unter anderem Werttypfelder, Verweistypfelder, Methoden, Attribute und Eigenschaften enthalten
- Attribute beschreiben einen Typ, eine Methode oder eine Eigenschaft
- Mit Reflektion ist es möglich Attribute aus dem Programmcode aus abzurufen
- Attribute werden beispielsweise für die Angabe von Sicherheitsprivilegien benötigt, oder zum Deklarieren für Fähigkeiten zum Serialisieren
- Durch Attribute wird die Assembly durch Namen, Beschreibung und Copyright beschrieben
- Die Typweiterleitung (TypeForwardedTo) ist ein Attribut, dass einem erlaubt einen Type von der einen Assembly zu einer anderen zu verschieben, ohne neu kompilieren zu müssen
- Konsistenz zwischen den Klassen kann man unter anderen durch Vererbung ermöglichen
- Vererbung ist das Ableiten einer Klasse von Basisklassen (Spezialisierung) oder von Schnittstellen (Interfaces)
- Schnittstellen werden auch als Verträge bezeichnet (Contract)
- Eine Schnittstelle definiert einen gemeinsamen Satz, die alle Klassen die dieses Interface implementiert, zur Verfügung stellen müssen
- Häufig benutze Schnittstellen
- IComparable (wird für das Sortieren benötigt)
- IDisposable (Definiert Methoden, mit denen man Objekte von Hand beseitigen kann. Wichtig für große Objekte, oder für jene Objekte die Zugriffe von Datenbankressourcen sperren)
- IConvertible (ermöglich das Konvertieren in einen Grundtypen wie bool,byte, string oder double)
- ICloneable (ermöglich das Kopieren eines Objektes)
- IEquatable (Ermöglich, Instanzen auf Gleichheit zu prüfen)
- Durch Generika ermöglicht man, Klassen oder Methoden zu erstellen, die mit einer Vielzahl von Typen funktionieren
- Generische Klassen bieten besser Leistung und Typensicherheit.
- Das Framework enthält bereits eine Vielzahl von generischen Klassen, beispielsweise:
- List, SortedList
- Dictionary, SortedDictionary
- Queue
- Bei der Benutzung von Generika, ist ein Boxing oder Unboxing zur Konvertierung von Typen nicht erforderlich, so erzielt man verbesserte Leistung und somit weniger Prozessorzeit
- Generika unterstützen vier Arten von Einschränkungen mit Hilfe einer “where Klausel”
- Klassen die eine bestimmte Schnittstelle implementieren
- Klassen die einer Basisklasse abgeleitet sind
- nur Klassen die einen parameterlosen Konstruktor implementieren
- entweder Verweis- oder Wertetypen
- Klassen können Ereignisse abfangen und auslösen
- Ereignisse (events) sind Nachrichten, die von Objekten gesendet werden. Dieses kann durch die Interaktion einen Benutzers, aber auch durch Programmlogik geschehen.
- Das auslösende Objekt bezeichnet man als Eventsender, welches das Event entgegen nimmt, wird als Ereignisempfänger bezeichnet.
- Der Sender kennt die Empfänger und deren Methoden NICHT
- Hier wird ein Vermittler in Form eines Delegaten benötigt, der ähnlich wie ein Funktionszeiger fungiert
- Ein Delegat ist eine Klasse, die einen Verweis auf eine Methode speichern kann
- Ein Delegat hat eine Signatur und kann nur auf Methoden verweisen die der selben Signatur entsprechen
- Ein Delegat ist Typsicher
- Partielle Klassen: Mit Hilfe partieller Klassen ist es möglich Klassendefinitionen über mehrere Quelldateien zu verteilen
- Abstrakte Klassen: können nicht instanziiert werden
- abstrakte Klassen ähneln Schnittstellen, nur in abstrakten Klassen ist es auch möglich Methoden mit Rumpf zu implementieren
BeispielCode Generika:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | using System; namespace Generika3423 { class Program { static void Main(string[] args) { MyGenericClass<int> test; test = new MyGenericClass<int>(15, 9); var a = test.MinValue(); MyGenericClass<char> test2; test2 = new MyGenericClass<char>(')', '%'); var b = test2.MinValue(); } } class MyGenericClass<T> where T : IComparable { public T Value1; public T Value2; public MyGenericClass(T value1, T value2) { Value1 = value1; Value2 = value2; } public T MinValue() { if (Value1.CompareTo(Value2) < 0) return Value1; else return Value2; } } } |
Links: Generika, Interfaces, Boxing, Unboxing, Ereignisse
Weiter geht’s mit der Ein- und Ausgabe (E/A). Bis dahin…
Viel Spass beim entwickeln : )
btw, ich hab noch 10 Invites für Google Wave zu vergeben…







