Autor Beitrag
stoeberhai97
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 20.12.08 00:45 
Hallo!
Ich versuche gerade als blutiger Programmieranfänger durch C# durchzusteigen und habe mir oben genanntes Buch zugelegt.
Als Compiler verwende ich C# aus Visual Studio 2008.
Auf Seite 194 ist ein Beispiel zu Werttypen mit Enumerationen und Strukturen.
Alles schön eingegeben und halbwegs verstanden, kommt nur leider auf der Konsole nicht das, was eigentlich erscheinen sollte.
Statt der Ausgabe
1. Januar 1900 und
31.Oktober 2005
erschein jeweils
StructsAndEnums.Date
(siehe Bild)
Warum wird der Name des Namespace ausgegeben? Im Debugger sehe ich, daß die Strukturen eigentlich richtig belegt wurden?!


Moderiert von user profile iconAXMD: Topic aus Bücher verschoben am Sa 20.12.2008 um 11:14
Einloggen, um Attachments anzusehen!
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 20.12.08 12:35 
Hallo,

vorab: ich ziehe es vor, wenn solch kurzer Code hier zitiert und unter "Bereiche" als solcher markiert wird; auch die Ausgabe kann als Zitat gezeigt werden. Ein Bild extra herunterzuladen und an anderer Stelle als diesem Thread zu untersuchen, halte ich für unpraktisch. (Das mögen andere anders sehen; aber ich habe oft keine Lust, auf Themen mit Download zu antworten.)

Zur Sache: Ich kann nicht erkennen, welche Typen mit Date und Month gemeint sind. Wenn bei einem Typen die Methode ToString() nicht anders festgelegt ist, gibt NET stattdessen den Namen des Typs aus; das ist bei den beiden letzten Zeilen der Fall.

Nachtrag: Ich habe jetzt nochmals Dein Bild geprüft und erkenne, dass es zwei weitere Dateien mit diesen Namen gibt; das sind dann vermutlich gleichnamige Klassen. Das mag dann passen; ich warne aber trotzdem vor einer Verwirrung (auch wenn es im Buch vermutlich genauso gemacht wurde), wenn gängige Bezeichner aus dem Framework selbst für andersgeartete Objekte verwendet werden.

Console.WriteLine erwartet grundsätzlich einen String. Aber zur Vereinfachung für schreibfaule Programmierung gibt es etwa zwei Dutzend Überladungen mit folgender Anleitung:
Zitat:
Schreibt die Textdarstellung des angegebenen ... Werts, gefolgt...

Für die benötigte Textdarstellung wird ToString() des betreffenden Typs aufgerufen.

Zusätzlicher Hinweis: Hast Du bedacht, dass bei ++value zuerst der Wert erhöht wird und dann die betreffende Stelle ausgewertet wird?

Gruß Jürgen
stoeberhai97 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 20.12.08 16:47 
Titel: Danke, es funktioniert jetzt!
Hallo Jürgen,
Danke. Du hast mich auf die richtige Spur gebracht. Tatsächlich fehlte in der Methode ToString() in meiner Struktur Date das Schlüsselwort override.
Jetzt läuft es richtig.
Das Inkrementieren ist so gewollt gewesen.
Vielen Dank für Deine Hilfe! So ein Forum ist wirklich eine super Sache, wenn man nicht weiter kommt. Ich werde auch Deine Anregung aufgreifen und zukünftig statt der Bilder den Quellcode einfügen.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
using System;

namespace StructsAndEnums
{
    struct Date
    {
        public Date(int ccyy, Month mm, int dd)
        {
            this.year = ccyy - 1900;
            this.month = mm;
            this.day = dd - 1;
        }

        public override string ToString()
        {
            return (this.day + 1) + ". " + this.month + " " + (this.year + 1900);
        }

        private int year;
        private Month month;
        private int day;
    }

}