© APSIS GmbH extern.gif (1249 Byte), Polling, 2001, 2002, 2003


Errata (bekannte Fehler)

Stand: 22. April 2002



Auf Seite 20, der vorletzte Absatz des Kapitels 2.1.5 lautet richtig:

Dies liegt daran, dass in der Klasse System.String der Vergleichsoperator == (und somit auch !=) überschrieben wurde (s. Kapitel 4.2.3. auf Seite 87).

und nicht wie im Buch

Dies liegt daran, dass System.String in C# keine Klasse (wie in Java), sondern eine Struktur ist (s. Kapitel 3.1.1. auf Seite 56); Strukturen sind Wertetypen  (value type ), wie alle primitiven Variablen, und keine Referenztypen. Auch eine string-Variable ist – im Gegensatz zu Javas String oder C++’ char* – keine Referenz.

(d.h. System.String ist kein Wertetyp, wie fehlerhaft behauptet, sondern ein Referenztyp); ähnlich auf Seite 115


Auf Seite 22 wurde "Referenzparameter" fehlerhaft unter den Variablen mit impliziter Vorbesetzung aufgelistet. Die Tabelle lautet richtig

Variable
├─ mit impliziter Vorbesetzung (Nullwert)
  ├─ Reihungselement
  ├─ Datenelement (field ) einer Klasse
    ├─ Klassenelement (static)
    └─ Objektelement
  └─ Werteparameter
└─ ohne impliziter Vorbesetzung
   ├─ lokal
   ├─ Ausgabe- und Referenzparameter (out und ref)
   └─ Datenelement (field ) einer Struktur

und nicht wie im Buch

Variable
├─ mit impliziter Vorbesetzung (Nullwert)
  ├─ Reihungselement
  ├─ Datenelement (field ) einer Klasse
    ├─ Klassenelement (static)
    └─ Objektelement
  └─ Parameter
     ├─ Werteparameter
     └─ Referenzparameter (ref)
└─ ohne impliziter Vorbesetzung
   ├─ lokal
   ├─ Ausgabeparameter (out)
   └─ Datenelement (field ) einer Struktur


Auf Seite 25, der vorletzte Eintrag der Tabelle lautet richtig:

            ├─ vorzeichenbehaftete Ganzzahltypen
             └─ sbyte short int long

und nicht wie im Buch

            ├─ vorzeichenbehaftete Ganzzahltypen
             └─
sbyte short uint ulong

(dh. nicht uint und ulong, sondern int und long sind vorzeichenbehaftete Ganzzahltypen)


Auf Seite 48 lautet das Programm 2.35 richtig

byte[][] dreieck = new byte[10][]; // (2.35)
for (int i = 1; i < dreieck.Length; i++) {
   dreieck[i] = new byte[i];
   for (int j = 0; j < dreieck[i].Length; j++) {
               dreieck[i][j] = (byte)(i * j); } }

und nicht wie im Buch

byte[][] dreieck = new byte[10][]; // (2.35)
for (int i = 1; i <= dreieck.Length; i++) {
   dreieck[i] = new byte[i];
   for (int j = 0; j < dreieck[i].Length; i++) {
               dreieck[i][j] = (byte)(i * j); } }

Auf Seite 61 (Kapitel 3.2.4) soll public vor dem Destruktor gestrichen werden: 

   ~Klasse() : { datei.Close(); }

und nicht wie im Buch
   public ~Klasse() : { datei.Close(); }

Destruktoren haben in C# keinen Zugriffschutz (sind immer öffentlich).

Auf der Seite 115, der letzte Absatz des Kapitels 5.1.1 sollte gestrichen werden:

Es sei noch einmal erwähnt (s. Kapitel 3.1.2. auf Seite 57), dass System.String als struct vereinbart wurde; deswegen kopiert die Zuweisung nicht die Referenz, sondern die Zeichenkette:

string zeichenkette1 = zeichenkette2; // Kopie, auch wenn lang

(d.h. System.String ist kein struct, wie fehlerhaft behauptet, sondern class); ähnlich auf Seite 20


Auf der Seite 137, vorletzte Zeile:

SOAP (Simple Object Access Protocol)

und nicht wie im Buch

SOAP (Symbolic Optimizer and Assembly Program)


Auf der Seite 140, im Programm (5.16) soll nicht nur Eintragen, sondern auch Entnehmen mit override gekennzeichnet werden:

   public override object Entnehmen() {

und nicht wie im Buch
   public object Entnehmen() {

Fehler, Korrekturen und Verbesserungsvorschläge können auf die folgende Adresse zugeschickt werden:

prof@solymosi.com


© APSIS GmbH extern.gif (1249 Byte), Polling, 2001, 2002, 2003