Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einführung
2 Grundlagen der Sprachsyntax
3 Klassendesign
4 Weitere Datentypen
5 Multithreading
6 Collections und LINQ
7 Eingabe und Ausgabe
8 Anwendungen: Struktur und Installation
9 Code erstellen und debuggen
10 Einige Basisklassen
11 Windows-Anwendungen erstellen
12 Die wichtigsten Steuerelemente
13 Tastatur- und Mausereignisse
14 MDI-Anwendungen
15 Grafiken mit GDI+
16 Drucken
17 Entwickeln von Steuerelementen
18 Programmiertechniken
19 WPF – Grundlagen
20 Layoutcontainer
21 WPF-Steuerelemente
22 Konzepte von WPF
23 Datenbankverbindung mit ADO.NET
24 Datenbankabfragen mit ADO.NET
25 DataAdapter
26 Offline mit DataSet
27 Datenbanken aktualisieren
28 Stark typisierte DataSets
A Anhang: Einige Übersichten
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual Basic 2008 von Andreas Kuehnel, Stephan Leibbrandt
Das umfassende Handbuch
Buch: Visual Basic 2008

Visual Basic 2008
3., aktualisierte und erweiterte Auflage, geb., mit DVD
1.323 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1171-0
Pfeil 3 Klassendesign
Pfeil 3.1 Objektorientierung
Pfeil 3.1.1 Einführung
Pfeil 3.1.2 Vorteile
Pfeil 3.1.3 Klassenimplementierung in .NET
Pfeil 3.1.4 Klassen in Visual Basic
Pfeil 3.1.5 Projekttyp »Klassenbibliothek«
Pfeil 3.1.6 Bemerkung zu den Codefragmenten
Pfeil 3.1.7 Objekte durch New
Pfeil 3.1.8 Ausnahmen mit Throw auslösen
Pfeil 3.1.9 Datentypen
Pfeil 3.1.10 Sichtbarkeit der Klasse
Pfeil 3.1.11 Aufteilung der Definition mit Partial
Pfeil 3.1.12 Grafikbibliothek: Beispiel für Kapitel 3 und 4
Pfeil 3.2 Kapselung
Pfeil 3.2.1 Kombinationen
Pfeil 3.2.2 Private
Pfeil 3.2.3 Sichtbarkeitsmodifikatoren
Pfeil 3.2.4 Lokale Variablen
Pfeil 3.2.5 Softwareschutz
Pfeil 3.2.6 Grafikbibliothek: private Größe des Rechtecks
Pfeil 3.3 Verhalten (Methoden)
Pfeil 3.3.1 Prinzip
Pfeil 3.3.2 Verlassen der Methode
Pfeil 3.3.3 Parameter
Pfeil 3.3.4 Überladung (Overloads)
Pfeil 3.3.5 Rückgabewert
Pfeil 3.3.6 Reine Deklaration mit Partial
Pfeil 3.3.7 Grafikbibliothek: Zugriffsmethoden auf die Größe des Rechtecks
Pfeil 3.4 Bindung
Pfeil 3.4.1 Klassenbindung mit Shared
Pfeil 3.4.2 Klassenkonstruktoren
Pfeil 3.4.3 Externe Funktionen
Pfeil 3.4.4 Grafikbibliothek: Rechteckübergreifendes
Pfeil 3.5 Objektinitialisierung mit Konstruktoren
Pfeil 3.5.1 Objektkonstruktoren
Pfeil 3.5.2 Nichtöffentliche Konstrukturen
Pfeil 3.5.3 Grafikbibliothek: Initialisierung des Rechtecks
Pfeil 3.6 Zustände (Felder)
Pfeil 3.6.1 Deklaration und Initialisierung
Pfeil 3.6.2 Sichtbarkeit
Pfeil 3.6.3 Konstanten: ReadOnly und Const
Pfeil 3.6.4 With
Pfeil 3.6.5 Grafikbibliothek: Konstanten des Rechtecks
Pfeil 3.7 Eigenschaften
Pfeil 3.7.1 Kontrolle beim Aufrufer
Pfeil 3.7.2 Zugriffsmethoden
Pfeil 3.7.3 Getter und Setter: Property
Pfeil 3.7.4 Indexer
Pfeil 3.7.5 Standardeigenschaft: Default
Pfeil 3.7.6 Schreibschutz und Leseschutz: ReadOnly und WriteOnly
Pfeil 3.7.7 Sichtbarkeit
Pfeil 3.7.8 Klammern
Pfeil 3.7.9 Grafikbibliothek: Eigenschaften des Rechtecks
Pfeil 3.8 Innere Klassen
Pfeil 3.8.1 Beziehung zur äußeren Klasse
Pfeil 3.8.2 Sichtbarkeit
Pfeil 3.8.3 Grafikbibliothek: Position des Rechtecks
Pfeil 3.9 Dynamisches Verhalten: Delegate und Function
Pfeil 3.9.1 Funktionszeiger: Delegates
Pfeil 3.9.2 Automatisch generierter Code
Pfeil 3.9.3 Mehrere Aktionen gleichzeitig
Pfeil 3.9.4 Asynchrone Aufrufe
Pfeil 3.9.5 Funktionsobjekte: Function (λ-Ausdrücke)
Pfeil 3.9.6 Umwandlungen
Pfeil 3.9.7 Grafikbibliothek: Vergleich von Rechtecken
Pfeil 3.10 Ereignisse
Pfeil 3.10.1 Ereignis: Event und RaiseEvent
Pfeil 3.10.2 Statische Methodenbindung WithEvents und Handles
Pfeil 3.10.3 Dynamische Methodenbindung: AddHandler und RemoveHandler
Pfeil 3.10.4 Benutzerdefinierte Ereignisse: Custom Event
Pfeil 3.10.5 Umwandlungen
Pfeil 3.10.6 Grafikbibliothek: Größenänderungen von Rechtecken überwachen
Pfeil 3.11 Benutzerdefinierte Operatoren
Pfeil 3.11.1 Prinzip
Pfeil 3.11.2 Überladung
Pfeil 3.11.3 Vergleich
Pfeil 3.11.4 Typumwandlung mit CType: Widening und Narrowing
Pfeil 3.11.5 Wahrheitswerte: IsTrue und IsFalse
Pfeil 3.11.6 Grafikbibliothek: Addition und Umwandlung von Rechtecken
Pfeil 3.12 Alle Klassenelemente
Pfeil 3.12.1 Der Namensraum My
Pfeil 3.13 Vererbung
Pfeil 3.13.1 Klassenbeziehung durch Inherits
Pfeil 3.13.2 Sichtbarkeitsmodifikatoren
Pfeil 3.13.3 Zugriff auf Eltern mit MyBase
Pfeil 3.13.4 Modifikation: Shadows und Overloads (Overrides)
Pfeil 3.13.5 Abstrakte Klassen: MustInherit und MustOverride
Pfeil 3.13.6 Spezifische Catch-Blöcke
Pfeil 3.13.7 Eigene Ausnahmen
Pfeil 3.13.8 Arrays
Pfeil 3.13.9 Grafikbibliothek: neue Vielecke
Pfeil 3.14 Polymorphie
Pfeil 3.14.1 Virtuelle Methoden: Overridable und Overrides
Pfeil 3.14.2 Unterbrechen: Overloads, Shadows und Overrides
Pfeil 3.14.3 Unterbinden: NotInheritable, NotOverridable und MyClass
Pfeil 3.14.4 Konstruktoren
Pfeil 3.14.5 Equals
Pfeil 3.14.6 ToString
Pfeil 3.14.7 Grafikbibliothek: Objektsammlungen
Pfeil 3.15 Schnittstellen: Interface und Implements
Pfeil 3.15.1 Benennungen und Parameter
Pfeil 3.15.2 Schnittstellen und Vererbung
Pfeil 3.15.3 Schnittstellenvererbung
Pfeil 3.15.4 Schnittstelle oder abstrakte Klasse?
Pfeil 3.15.5 Grafikbibliothek: Flächen
Pfeil 3.16 Lebensende eines Objekts
Pfeil 3.16.1 Garbage Collector
Pfeil 3.16.2 Destruktoren
Pfeil 3.16.3 Dispose und Using


Rheinwerk Computing - Zum Seitenanfang

3.6 Zustände (Felder) Zur nächsten ÜberschriftZur vorigen Überschrift


Rheinwerk Computing - Zum Seitenanfang

3.6.1 Deklaration und Initialisierung Zur nächsten ÜberschriftZur vorigen Überschrift

Neben der Initialisierung von Objektfeldern im Konstruktor gibt es die Möglichkeit, diese analog zu lokalen Variablen während der Deklaration direkt mit einem Wert zu belegen. Optionale Teile sind in eckige Klammern gesetzt, kursive Teile müssen Sie Ihren Bedürfnissen anpassen:


[<Modifikatoren>] name As typ [= <Wert>]

Diese Initialisierung ist sehr empfehlenswert, da sofort klar ist, mit welchem Wert eine Variable ihr Leben beginnt. Damit müssen Sie sich nicht mehr merken, wie der Standardwert einer Variablen lautet. Die erlaubten Modifikatoren zeigt Tabelle 3.7.


Tabelle 3.7 Modifikatoren eines Objektfeldes

Art Beschreibung

Sichtbarkeit

Grad der Öffentlichkeit (siehe Abschnitt 3.2, »Kapselung«)

Bindung

Objekt- oder klassenbezogen (siehe Abschnitt 3.4, »Bindung«)

Redefinition

Ersatz mit Shadows (siehe Abschnitt 3.13, »Vererbung«)

Konstanz

Ob Konstante (siehe Abschnitt 3.6.3, »Konstanten: ReadOnly und Const«)


Das folgende Codefragment testet die Reihenfolge der Initialisierung der Objektvariablen. Zur Protokollierung durchlaufen alle Initialisierungswerte eine Funktion.


'...\Klassendesign\Felder\Initialisierung.vb

Option Explicit On 
Namespace Klassendesign

  Class InitQuadrat 
    Private höhe As Double = v(0) 
    Private a As Double = v(-1) 
    Sub New(ByVal a As Double) 
      Console.WriteLine("Länge {0} ", Me.a) 
      Me.a = If(a > 0, a, 1) 
      Console.WriteLine("Länge {0} ", Me.a) 
    End Sub 
  End Class

  Module Initialisierung 
    Function v(ByVal w As Double) As Double 
      Console.WriteLine("Wert {0} ", w) 
      Return w 
    End Function 
    Sub Test() 
      Dim re As InitQuadrat = New InitQuadrat(v(7)) 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Die Ausgaben zeigen, dass zuerst der Parameter des Konstruktors ausgewertet wird. Danach folgen alle Startwerte der Variablen in der Reihenfolge ihrer Deklaration. Erst danach werden die Anweisungen des Konstruktors ausgeführt. Also: Erst kommen die direkten Initialisierungen, dann kommt der Konstruktor.

Wert 7 
Wert 0 
Wert –1 
Länge –1 
Länge 7

Hinweis
Da die Reihenfolge von verschiedenen mit Partial gekennzeichneten Teilen einer Klasse nicht definiert ist, kann auch über die Reihenfolge der Feldinitialisierungen keine Aussage gemacht werden (innerhalb eines Teils bleibt die Reihenfolge gemäß des Quelltexts erhalten).



Rheinwerk Computing - Zum Seitenanfang

3.6.2 Sichtbarkeit Zur nächsten ÜberschriftZur vorigen Überschrift

Wie bereits in Abschnitt 2.5.5, »Sichtbarkeit und Lebensdauer«, dargestellt wurde, kann auf Objektfelder in jeder Methode zugegriffen werden. Im folgenden Codefragment greifen zwei verschiedene Methoden auf dieselbe Objektvariable a zu:


'...\Klassendesign\Felder\Sichtbarkeit.vb

Option Explicit On 
Namespace Klassendesign

  Class VariablesQuadrat 
    Private a As Double = 3 
    Sub Wurzel() 
      a = Math.Sqrt(a) 
    End Sub 
    Sub Verdoppeln() 
      a *= 2 
    End Sub 
    Sub Druck() 
      Console.WriteLine("Fläche {0}.", a * a) 
    End Sub 
  End Class

  Module Sichtbarkeit 
    Sub Test() 
      Dim re As VariablesQuadrat = New VariablesQuadrat() 
      re.Verdoppeln() : re.Druck() 
      re.Wurzel() : re.Druck() 
      re.Verdoppeln() : re.Druck() 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Die Ausgabe bestätigt, dass die Änderungsmethoden beide auf dieselbe Objektvariable zugreifen: Eine vorherige Änderung ist jeweils in der Methode sichtbar.

Fläche 36. 
Fläche 6. 
Fläche 24.

Rheinwerk Computing - Zum Seitenanfang

3.6.3 Konstanten: ReadOnly und Const Zur nächsten ÜberschriftZur vorigen Überschrift

Es gibt in Visual Basic zwei Arten von Konstanten, die durch einen der Modifikator Const oder ReadOnly gekennzeichnet werden (optionale Teile sind in eckige Klammern gesetzt, kursive Teile müssen Sie Ihren Bedürfnissen anpassen):


[<Modifikator>] Const name As typ = wert 
[<Modifikator>] Readonly name As typ = wert 
[<Modifikator>] ReadOnly name As typ

Der Wert der Const-Konstante muss bei der Deklaration erfolgen, während dies bei ReadOnly außerdem im Konstruktor passieren darf. An allen anderen Stellen können die Konstanten nicht geändert werden. Eine ReadOnly-Konstante kann für jedes Objekt verschieden sein; bei Const ist es eine für alle Objekte der Klasse. Das konstante Feld darf dieselben Modifikatoren haben wie jedes andere Feld (siehe Tabelle 3.7: Modifikatoren eines Objektfeldes«). Tabelle 3.8 vergleicht die beiden Arten von Konstanten.


Tabelle 3.8 Konstanten

Art ReadOnly Const

Bindung

Objekt oder Klasse

Klasse

Zeitpunkt

Laufzeit

Compilezeit

Intialisierung

direkt oder Konstruktor

direkt


Während die Initialisierungen der ReadOnly-Konstanten vor der Ausführung des Konstruktors in der Reihenfolge ihres Auftretens im Quelltext ausgewertet werden (siehe Abschnitt 3.6.1, »Deklaration und Initialisierung«), garantiert der Compiler für die Const-Konstanten die richtige Reihenfolge.

Das folgende Codefragment testet die verschiedenen Spielarten von Konstanten: klassengebundene Compilerkonstante (Const), klassengebundene Laufzeitkonstante (Shared ReadOnly) und objektgebundene Laufzeitkonstante (ReadOnly). Der Wert der mit Const deklarierten Konstanten wird durch den Compiler ermittelt und ist nach der Deklaration unveränderlich. Jeder Versuch, später einen Wert zuzuweisen – auch im Klassenkonstruktor (Shared Sub New) –, wird vom Compiler zurückgewiesen. Das sieht bei den ReadOnly-Konstanten anders aus. Ihr Wert ist erst nach dem Verlassen des Konstruktors endgültig. Im Code wird während der Deklaration ein Wert zugewiesen und dann im Konstruktor geändert. Eine Zuweisung an jeder anderen Stelle wird vom Compiler zurückgewiesen. Bitte beachten Sie, dass eine Klassenkonstante nur im Klassenkonstruktor belegt werden darf, während für Objektkonstanten nur der Objektkonstruktor in Frage kommt. Die letzte Zeile vor ReadLine zeigt, dass die Objektreferenz, die in einer Konstanten gespeichert ist, konstant ist, während das Objekt, auf das sie zeigt, geändert werden darf.


'...\Klassendesign\Felder\Konstanten.vb

Option Explicit On 
Namespace Klassendesign

  Class Zeit 
    Friend Zugriff As Date 
    Friend Const Quelltext As Date = #1/8/2008 12:28:12 PM# 
    Friend Shared ReadOnly Klasseninit As Date = Quelltext 
    Friend ReadOnly Feldinit As Date = Quelltext 
    Shared Sub New() 
      Klasseninit = Now 
    End Sub 
    Sub New(ByVal zeit As Date) 
      Me.Feldinit = zeit 
    End Sub 
  End Class

  Module Konstanten 
    Sub Test() 
      Dim re As Zeit = New Zeit(Now) 
      Console.WriteLine("Quelltext {0}", Zeit.Quelltext) 
      Console.WriteLine("Feldinit {0}", re.Feldinit) 
      Console.WriteLine("Klasseninit {0}", Zeit.Klasseninit) 
      re.Zugriff = Now 'Zeiger ist konstant, nicht Objekt 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Die Ausgabe bestätigt, dass die ReadOnly-Konstanten im korrespondierenden Konstruktor einen neuen Wert erhalten haben:

Quelltext 1/8/2008 12:28:12 PM 
Feldinit 1/9/2008 4:15:51 PM 
Klasseninit 1/9/2008 4:15:51 PM

Hinweis
Wenn eine Konstante auf ein Objekt zeigt, darf dieses geändert, aber nicht vollständig ersetzt werden (konstanter Zeiger auf veränderbares Objekt).



Rheinwerk Computing - Zum Seitenanfang

3.6.4 With Zur nächsten ÜberschriftZur vorigen Überschrift

Ganz im Gegensatz zur sonstigen Syntax unterstützt Visual Basic Tippfaule, wenn es darum geht, mehrfach auf dasselbe Objekt oder dieselben Objekte zuzugreifen (optionale Teile sind in eckige Klammern gesetzt und kursive Teile passen Sie Ihren Bedürfnissen an):


With objekt 
  [<Anweisungen mit .Mitglied statt objekt.Mitglied>] 
End With

Das folgende Codefragment benutzt With, um mehrere Felder desselben Objekts auszulesen:


'...\Klassendesign\Bindung\With.vb

Option Explicit On 
Namespace Klassendesign

  Class Rechteck 
    Sub New() 
      Console.WriteLine("Rechteck") 
    End Sub 
    Friend a As Double = 7, b As Double = 5 
  End Class

  Module WithAbkürzung 
    Sub Test() 
      With New Rechteck() 
        Console.WriteLine("a = {0}", .a) 
        Console.WriteLine("b = {0}", .b) 
      End With 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Die Ausgabe zeigt, dass der Ausdruck in With nur einmalig ausgewertet wurde (sonst hätte der Konstruktor von Rechteck mehrere Ausgaben generiert):

Rechteck 
a = 7 
b = 5

Hinweis
Analog wird der Zugriff auf Standardeigenschaften mittels des Ausrufezeichens unterstützt (siehe Abschnitt 3.7.5, »Standardeigenschaft: Default«).



Rheinwerk Computing - Zum Seitenanfang

3.6.5 Grafikbibliothek: Konstanten des Rechtecks topZur vorigen Überschrift

In diesem Abschnitt erweitern wir die in Abschnitt 3.1.12, »Grafikbibliothek: Beispiel für Kapitel 3 und 4«, eingeführte und zuletzt in Abschnitt 3.5.3, »Grafikbibliothek: Initialisierung des Rechtecks«, erweiterte Grafikanwendung. Hier fügen wir nur eine Konstante hinzu:


'...\Klassendesign\Graphik\Felder.vb

Option Explicit On 
Namespace Klassendesign 
  Partial Public Class Rechteck

    Public Const Winkel As Double = 90

  End Class 
End Namespace

Der Zugriff auf die Konstante erfolgt über den Klassennamen, da mit Const deklarierte Compilerkonstanten implizit an die Klasse gebunden sind.


'...\Klassendesign\Zeichner\Felder.vb

Option Explicit On 
Namespace Klassendesign 
  Partial Class Zeichner

    Sub Felder() 
      Console.WriteLine("Winkel im Rechteck: {0} Grad", Rechteck.Winkel) 
    End Sub 
  End Class 
End Namespace

Zur Kontrolle sehen Sie hier die Ausgabe der Methode Felder():

Winkel im Rechteck: 90 Grad

Die nächste Erweiterung erfolgt in Abschnitt 3.7.9, »Grafikbibliothek: Eigenschaften des Rechtecks«.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual Basic 2008
Visual Basic 2008
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Visual Basic 2012






 Visual Basic 2012


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de