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

Jetzt 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.4 Bindung Zur nächsten ÜberschriftZur vorigen Überschrift


Rheinwerk Computing - Zum Seitenanfang

3.4.1 Klassenbindung mit Shared Zur nächsten ÜberschriftZur vorigen Überschrift

Bisher haben wir uns mit Zuständen und Methoden beschäftigt, die in Zusammenhang mit einem Objekt standen. Es gibt Situationen, in denen ein Zustand für alle Objekte einer Klasse gleich ist. Ein Beispiel ist eine Variable, die speichert, wie viele Zustandsvariablen ein Objekt hat. Diese Anzahl ist im Quelltext festgelegt und ändert sich nicht, egal ob Sie kein oder tausend Objekte herstellen. Es ist dann nur logisch, diese Variable nicht extra in jedem Objekt zu speichern, sondern nur einmalig in der Klasse. Analog dazu gibt es Methoden, die gar keine Zustandsinformationen des Objekts benötigen. Zum Beispiel hat eine Methode, die das Quadrat einer Zahl berechnet, nichts mit dem Zustand eines Objektes zu tun. Auch hier ist es konsistenter, solch ein Verhalten an die Klasse und nicht an das Objekt zu binden. Diese Art der Bindung wird durch den Modifikator Shared festgelegt. Solche Elemente heißen auch statisch.

Schauen wir uns das Konzept anhand von zwei Beispielen an. Die folgende Anwendung zählt Rechtecke. Da alle Informationen als Parameter übergeben werden, ist es nicht sinnvoll, die Zählmethode an ein konkretes Objekt zu binden. Daher wird sie mit Shared gekennzeichnet.


'...\Klassendesign\Bindung\SharedMethode.vb

Option Explicit On 
Namespace Klassendesign 
  Class RectZahl

    Public a, b As Double

    Public Shared Function Anzahl(ByVal res() As RectZahl) As Integer 
      For Each re As RectZahl In res 
        If re.a * re.b > 30 Then Anzahl += 1 
      Next 
    End Function

  End Class 
  ... 
End Namespace

Im zweiten Beispiel schauen wir uns klassengebundene Variablen an. Das nächste Codefragment zeigt eine Auto-Klasse mit einem Besitzer für jedes Auto und einer Autotypbezeichnung, die für alle Autos gleich ist (Shared). In Test() werden die Besitzer festgelegt und in zwei Druckbefehlen protokolliert. Der Druckbefehl zeigt, wie über den Klassennamen und nicht über eine Objektreferenz auf die Variable Name zugegriffen wird, die an die Klasse gebunden ist. Danach ändert der erste Autobesitzer den Autonamen in 2CV. Dies zeigt, dass es möglich ist, über eine Objektreferenz auf ein an die Klasse gebundenes Klassenmitglied zuzugreifen. Schließlich wird der andere Besitzer, der nichts geändert hat, erneut protokolliert.


'...\Klassendesign\Bindung\SharedFeld.vb

Option Explicit On 
Namespace Klassendesign

  Class TPV                            'Toute Petite Voiture 
    Public Besitzer As String 
    Public Shared Name As String = "Ente" 
  End Class

  Module KlassenbindungFeld 
    Sub Test() 
      Dim f1 As TPV = New TPV() 
      Dim f2 As TPV = New TPV() 
      f1.Besitzer = "Helga Kohl" 
      f2.Besitzer = "Ralf Schröder" 
      Console.WriteLine(f1.Besitzer & " fährt " & TPV.Name) 
      Console.WriteLine(f2.Besitzer & " fährt " & TPV.Name) 
      f1.Name = "2CV" 
      Console.WriteLine(f2.Besitzer & " fährt " & TPV.Name) 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Die Ausgabe zeigt, dass die Änderung durch den ersten Besitzer auch die Autobezeichnung des zweiten Besitzers geändert hat. Alle Autos desselben Typs TPV haben das Feld Name gemeinsam. Es ist also egal, von welchem Objekt aus eine klassengebundene Variable geändert wird.

Helga Kohl fährt Ente 
Ralf Schröder fährt Ente 
Ralf Schröder fährt 2CV

Hinweis
Um die Bindung einfacher erkennen zu können, ist es sehr ratsam, mit dem Klassennamen auf ein klassengebundenes Element zuzugreifen.


Zugriff durch Objekt

Wenn auf ein klassengebundenes Element zugegriffen wird, verwendet der Compiler ausschließlich den Typ des qualifizierenden Bestandteils für den Zugriff. Eine Auswertung findet nicht statt. Im folgenden Codefragment wird über eine Funktion auf eine Klassenvariable zugegriffen. Jede Auswertung macht sich durch einen Ausdruck in der Konsole bemerkbar.


'...\Klassendesign\Bindung\Auswertung.vb

Option Explicit On 
Namespace Klassendesign 
  Class Mathe 
    Public Shared Pi As Double = 3.1415926 
  End Class

  Module Auswertung 
    Function Zugriff() As Mathe 
      Console.WriteLine("Zugriff") 
      Return New Mathe() 
    End Function

    Sub Test() 
      Console.WriteLine("Pi = {0}", Zugriff().Pi) 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Die Ausgabe zeigt, dass die Funktion Zugriff() nicht ausgewertet wurde.

Pi = 3.1415926

Zugriff auf Objekt

Aus einer klassengebundenen Methode heraus kann nicht auf eine Objektvariable oder Objektmethode zugegriffen werden. Ein mit Shared an die Klasse gebundenes Element weiß nichts von Objekten. Das folgende Codefragment erzeugt daher einen Compilerfehler, denn: welches der mit New Statisch() erzeugten Objekte sollte Zugriff() ansprechen?

Class Statisch 
  Public wert As Double

  Public Shared Sub Zugriff() 
    Console.WriteLine(wert)  'Fehler!! 
  End Sub 
End Class

Module

Module sind eine besondere Form von Klassen. Sie enthalten ausschließlich statische Mitglieder (das heißt, alle sind an die Klasse gebunden). Daher ist es auch nicht sinnvoll, Objekte eines Moduls zu erzeugen, und dies ist daher verboten. Die Mitglieder eines Moduls werden behandelt, als stünden sie zusätzlich noch parallel zum Modul, sodass sie ohne die Qualifikation durch den Modulnamen angesprochen werden können (siehe Abschnitt 2.5.5, »Sichtbarkeit und Lebensdauer«). Schließlich können Module nicht als Datentyp auftreten, zum Beispiel in generischen Typen (siehe Abschnitt 4.4, »Generisches«). Als Nicht-Typ können sie auch nicht innerhalb der Vererbung eingesetzt werden. (Ausnahme: Sie selbst haben Zugriff auf statische Methoden der Klasse Object.)


Hinweis
Ein Modul entspricht einer static-Klasse in C#.



Rheinwerk Computing - Zum Seitenanfang

3.4.2 Klassenkonstruktoren Zur nächsten ÜberschriftZur vorigen Überschrift

Eine Klasse hat eine Initialisierungsroutine, die aufgerufen wird, wenn die Klasse geladen wird, bevor das erste Objekt erzeugt wird. Der sogenannte Klassenkonstruktor wird meist verwendet, um klassengebundene Zustände zu initialisieren. Ein Klassenkonstruktor kann nicht einen anderen Klassenkonstruktor aufrufen, und es besteht kein Spielraum in der Syntax (keine Parameter, keine Modifikatoren). Die Anweisungen sind beliebig, also auch optional.


Shared Sub New() 
  [<Anweisungen>] 
End Sub


Hinweis
In Modulen fällt das Shared weg.


Klassen werden in der Reihenfolge geladen, in der sie zum ersten Mal gebraucht werden. Im nächsten Codefragment verwendet Modul den Typ Klasse. Da in einem Modul alle Mitglieder implizit klassengebunden sind, fehlt die Angabe von Shared. Die Klassenkonstruktoren beider Datentypen machen sich durch eine Konsolenausgabe bemerkbar.


'...\Klassendesign\Konstruktoren\Klasse.vb

Option Explicit On 
Namespace Klassendesign

  Class Klasse 
    Shared Sub New() 
      Console.WriteLine("Klasse") 
    End Sub 
  End Class

  Module Modul 
    Friend klasse As Klasse = New Klasse() 
    Sub New() 
      Console.WriteLine("Modul") 
    End Sub 
  End Module

  Module Klassenkonstruktor 
    Sub Test() 
      Equals(Modul.klasse, Nothing) 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Die Ausgabe zeigt die Ladereihenfolge der Datentypen:

Klasse 
Modul

Hinweis
Ein nicht gebrauchter Datentyp wird auch nicht initialisiert. Es reicht dazu nicht, nur den Typ zu verwenden, wie zum Beispiel in GetType.



Rheinwerk Computing - Zum Seitenanfang

3.4.3 Externe Funktionen Zur nächsten ÜberschriftZur vorigen Überschrift

Sollten Sie .NET als zu enges Korsett empfinden, können Sie Funktionen in externen Bibliotheken aufrufen. Das könnte der Fall sein, wenn Sie statt eines Fenstertitels eine Grafik in der Titelleiste sehen möchten, oder wenn Sie Programme für Mobilgeräte schreiben und die Version des .NET Compact Frameworks nicht alle benötigten Funktionen für das Gerät zur Verfügung stellt. Damit eine externe Funktion genutzt werden kann, muss ihre Signatur deklariert werden. Dazu stehen zwei gleichwertige Syntaxvarianten zur Verfügung (Sub erfolgt analog, optionale Teile stehen in eckigen Klammern, kursive Teile müssen Sie Ihren Bedürfnissen anpassen, und wie üblich trennt der Unterstrich Teile einer logischen Zeile):


[<Sichtbarkeit>] Declare [<Zeichensatz>] Function name Lib "datei" _ 
  [Alias "nameInBibliothek"] ([<Parameter>]) As typ

 [<Sichtbarkeit>] <System.Runtime.InteropServices.DllImport("datei")> _ 
  Public Shared Function name([<Parameter>]) As typ


Hinweis
Externe Methoden sind implizit an die Klasse gebunden (Shared).


Die Variante mit spitzen Klammern nutzt das Attribut DllImport, das sich über Parameter anpassen lässt. Attribute werden in Abschnitt 4.8, »Attribute«, erläutert. Die möglichen Sichtbarkeiten sind in Abschnitt 3.2.3, »Sichtbarkeitsmodifikatoren«, beschrieben. Die Spezifikation des Zeichensatzes betrifft die Konvertierung (auch Marshalling genannt) zwischen Bibliotheksfunktion und Visual Basic sowie die Wahl des Funktionsnamens innerhalb der Bibliothek (siehe Tabelle 3.5).


Tabelle 3.5 Zeichensatzspezifikation einer externen Bibliothek

Art Marshalling Funktionsname Fun

Ansi (Standard)

ANSI

Unmodifiziert

Unicode

Unicode

Unmodifiziert

Auto

nach Funktionsname

ANSI-Plattform (<=ME): erst Fun, wenn nicht gefunden, dann FunA Unicode-Plattform (>=NT): erst FunW, wenn nicht gefunden, dann Fun



Hinweis
Zeichenketten in externen Bibliotheken können – im Gegensatz zu Visual Basic – veränderlich sein.


Das folgende Codefragment zeigt die externe Funktion GetConsoleTitle. Auf der Internetseite http://www.pinvoke.net/default.aspx/kernel32.GetConsoleTitle habe ich mir die Anregung zu diesem Beispiel geholt. Durch die Zeichensatzspezifikation Auto wird der richtige Funktionsname gewählt. Eine Alternative dazu ist die Alias-Klausel in den drei Zeilen dar-über. Die Verwendung eines Attributs zeigen die vier ersten auskommentierten Zeilen.


'...\Klassendesign\Bindung\Extern.vb

Option Explicit On 
Imports SB = System.Text.StringBuilder 
Namespace Klassendesign 
  Class Extern

    '<System.Runtime.InteropServices.DllImport("kernel32")> _ 
    '  Shared Function GetConsoleTitle( _ 
    '  ByVal title As SB, ByVal buff As UInt32) As UInt32 
    'End Function

    'Declare Function GetConsoleTitle Lib "kernel32.dll" _ 
    '  Alias “GetConsoleTitleA” ( _ 
    '  ByVal title As SB, ByVal buff As UInt32) As UInt32

    Declare Auto Function GetConsoleTitle Lib "kernel32" ( _ 
      ByVal title As SB, ByVal buffSize As UInt32) As UInt32

    Shared Sub Test() 
      Dim sb As SB = New SB(1001) 
      Dim size As UInt32 = CType(sb.Capacity, UInt32) 
      Dim len As UInt32 = GetConsoleTitle(sb, size) 
      Console.WriteLine(sb.ToString()) 
      Console.WriteLine(len & " Zeichen") 
      Console.ReadLine() 
    End Sub 
  End Class 
End Namespace

Die Ausgabe zeigt, dass das Nullzeichen der Win32-Funktion, das das Ende einer Zeichenkette signalisiert, nicht mit kopiert wurde.

file:///E:/VisualStudioWS/Klassendesign/Bindung/bin/Debug/Bindung.EXE 
69 Zeichen

Hinweis
Externe Methoden können weder Ereignisse behandeln noch Schnittstellen implementieren. Auch dürfen sie keine Typparameter enthalten (siehe Abschnitt 4.4, »Generisches«).


Fehlermeldungen

Oft ist es schwierig, das Scheitern einer externen Funktion zu analysieren. Für Funktionen aus der Windows-API gibt es Möglichkeiten, Fehlertexte zu erhalten. Das folgende Code- fragment deklariert die externe Funktion GetLastError(), da bei meinen Tests der Aufruf Marshal.GetLastWin32Error() immer 0 zurückgab. In der Methode LastError() wird aus der Fehlernummer ein Fehlertext ermittelt. Schließlich wird die externe Funktion SetCurrentDirectory() als Testfunktion deklariert und in der Methode Test() ein »falscher« Aufruf erzeugt.


'...\Klassendesign\Bindung\ExternFehler.vb

Option Explicit On 
Imports System.Runtime.InteropServices 
Namespace Klassendesign

  Class ExternFehler

    <DllImport("kernel32.dll", CharSet:=CharSet.Unicode)> _ 
    Private Shared Function GetLastError() As Integer 
    End Function

    Public Shared Function LastError() As String 
      'Dim errno As Integer = Marshal.GetLastWin32Error() 
      Dim errno As Integer = GetLastError() 
      Dim mess As String = New ComponentModel.Win32Exception(errno).Message 
      Return mess 
    End Function

    <DllImport("kernel32")> _ 
    Shared Function SetCurrentDirectory(ByVal dir As String) As Boolean 
    End Function

    Shared Sub Test() 
      SetCurrentDirectory("?") 
      Console.WriteLine(LastError()) 
      Console.ReadLine() 
    End Sub 
  End Class 
End Namespace

Die Ausgabe gibt zumindest einen Hinweis:

The filename, directory name, or volume label syntax is incorrect

Rheinwerk Computing - Zum Seitenanfang

3.4.4 Grafikbibliothek: Rechteckübergreifendes 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.3.7, »Grafikbibliothek: Zugriffsmethoden auf die Größe des Rechtecks«, erweiterte Grafikanwendung. Zur späteren Protokollierung aller erzeugten Rechtecke führen wir je eine klassengebundene Methode und einen Zähler ein, der im Klassenkonstruktor initialisiert wird. Außerdem kommt eine Methode zur Addition von Rechteckflächen hinzu.


'...\Klassendesign\Graphik\Klassenbindung.vb

Option Explicit On 
Namespace Klassendesign 
  Partial Public Class Rechteck

    Private Shared anzahl As Integer

    Shared Sub New() 
      anzahl = 0 
    End Sub

    Shared Sub Erzeugt() 
      Console.WriteLine("Anzahl der erzeugten Rechtecke: {0}", anzahl) 
    End Sub

    Shared Sub Gesamtfläche(ByVal ParamArray rechtecke() As Rechteck) 
      Dim fläche As Double 
      For Each r As Rechteck In rechtecke : fläche += r.a * r.b : Next 
      Console.WriteLine("Gesamtfläche: {0}", fläche) 
    End Sub

  End Class 
End Namespace

Zum Testen definieren wir ein paar Rechtecke, deren Gesamtfläche wir ermitteln. Bitte beachten Sie die Verwendung des Klassennamens statt eines Objekts. Die Funktionalität, die mit der Anzahl zusammenhängt, testen wir in der nächsten Erweiterung in Abschnitt 3.5.3, »Grafikbibliothek: Initialisierung des Rechtecks«.


'...\Klassendesign\Zeichner\Klassenbindung.vb

Option Explicit On 
Namespace Klassendesign 
  Partial Class Zeichner 
    Sub Klassenbindung()

      Dim r1 As Rechteck = New Rechteck() : r1.Größe(3, 4) 
      Dim r2 As Rechteck = New Rechteck() : r2.Größe(11, 2) 
      Dim r3 As Rechteck = New Rechteck() : r3.Größe(7, 7) 
      Rechteck.Gesamtfläche(r1, r2, r3)

    End Sub 
  End Class 
End Namespace

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

Gesamtfläche: 83

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



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Visual Basic 2008
Visual Basic 2008
Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Visual Basic 2012






 Visual Basic 2012


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Rheinwerk-Shop: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Rheinwerk-Shop: Windows Presentation Foundation






 Windows Presentation
 Foundation


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
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

Cookie-Einstellungen ändern