Web- und Software Development

MCTS 70-536 Lession 3 – Klassen

Written By: Mario Priebe - Nov• 15•09

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

Ähnliche Beiträge

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.