Sturktur in C#
-
Hallo, hab mal eine Frage zu Strukturen in C#.
1. Laut meinem Compiler kann man keine parameterlosen Kosntruktoren für Strukturen erstellen. Komischerweise hab ich aber ein Buch "C# lernen" worin genau dies gemacht wird. Jetzt frag ich mich natürlich was das soll, ging das vielleicht früher mal oder liegts am MS C# 2005 Express. Oder war der Buchscreiber einfach nur eingenickt?
2. dafür erstmal ein wenig Code:
struct AAA { string name; int zahl; }; AAA[] ArrayOfAAA = new AAA[5]; AAA[1].zahl = 2;
Nun wurde mir gesagt, das diese Zuweisung angeblich nicht funktionieren sollte ( bei mir gehts aber), weil durch [] eine kopie des Structs im Array erstellt werden würde und die Zuweisung dann an die Kopie gehn würde. Und deshalb sollte man struct immer komplett zuweisen und nicht nur einzelne Eigenschaften. Ist da was dran und wieso geht das dann bei mir?
3. Ich bilde mir ein Irgendwo mal gelesen zu haben das Struct per default immer public sind, scheint aber irgendwie nicht so zu sein, oder?
-
C# Beginner schrieb:
3. Ich bilde mir ein Irgendwo mal gelesen zu haben [...}
Nicht irgendwo lesen, sondern am einfachsten direkt in der Original Dokumentation: http://msdn2.microsoft.com/en-us/library/aa287558(VS.71).aspx
Speziell zum Thema structs in C# (2.0): http://msdn2.microsoft.com/en-us/library/ah19swz4(VS.71).aspx
Spricht der Buchautor von C# 1.0 oder C# 2.0 ?
C# Beginner schrieb:
3. Ich bilde mir ein Irgendwo mal gelesen zu haben das Struct per default immer public sind [...}
Verwechselst Du hier vielleicht C++ mit C#? Das sind zwei völlig verschiedene Sprachen auch wenn sie ähnlich aussehen...
-
C# Beginner schrieb:
1. Laut meinem Compiler kann man keine parameterlosen Kosntruktoren für Strukturen erstellen. Komischerweise hab ich aber ein Buch "C# lernen" worin genau dies gemacht wird.
Oh, schlechtes Buch. Das geht nämlich wirklich nicht, und zwar, um große Mengen von Strukturen effizient initialisieren zu können. In Deinem Beispiel kann der Compiler z.B. ein großes Array ('new AAA[1000]') einfach dadurch initialisieren, dass er über den gesamten Speicherblock Nullen schreibt. Das ginge nicht, wenn er für jedes Element einen Konstruktor aufrufen müsste.