Initialisierung eines Structs mit Konstruktor
-
Der folgende Code liefert unterschiedliche Ergebnisse. Weis da jemand warum?
namespace ConsoleApp1 { class Program { public struct Foo { public int mStep; public Foo(int Step = -1) { mStep = Step; } } public class Foo2 { public int mStep; public Foo2(int Step = -1) { mStep = Step; } } static void Main(string[] args) { Foo f = new Foo(); Foo2 f2 = new Foo2(); System.Console.WriteLine("Foo.mStep = " + f.mStep); System.Console.WriteLine("Foo2.mStep = " + f2.mStep); System.Console.WriteLine("Hallo Welt"); } } }
-
Da sollten Zeiger genutzt werden, Du weiß Foo f und Foo2 f2 Zeiger zu. Das kann nichts werden.
Unzutreffendes gestrichen
-
@Quiche-Lorraine
Aus irgendeinem Grund erstellt C# einen Default Ctor, der den Member auf 0 setzt und der wird aufgerufen. Bei Class wird das nicht gemacht.@john-0 It's C# not C++
-
@john-0: Dies ist C#-Code...
Bei einer Struktur (
struct
) wird beiFoo()
immer der Standardkonstruktor aufgerufen, unabhängig ob es einen anderen Konstruktor mit Default-Parametern gibt (der also hier sinnlos ist)!
Man konnte (bis C# 9) bei einer Struktur auch keinen eigenen Standardkonstruktor erstellen, da dieser immer alle Member mit den Standardwerten (d.h. beiint
also0
) setzt, s.a. struct (bes. "16.4.5 Default values").
Seit C# 10 kann man jedoch Parameterless struct constructors erstellen.
-
Sorry, die Übersichtsliste verleitet einem zuweilen dazu, auf die falsche Beiträge zu antworten.
-
Nach einigen Beiträgen scrollen das Thema und der Name des Subforums schnell aus dem Sichtbereich, wäre schon gut, wenn das am oberen Bildschirmrand stehenbliebe und damit immer sichtbar wäre. Ich schlag das mal in Forentechnik vor.
-
Danke Leute, ich habe es verstanden.
Wäre aber schön gewesen wenn die IDE oder der Compiler eine Fehlermeldung gezeigt hätten.
-
@Quiche-Lorraine sagte in Initialisierung eines Structs mit Konstruktor:
Danke Leute, ich habe es verstanden.
Wäre aber schön gewesen wenn die IDE oder der Compiler eine Fehlermeldung gezeigt hätten.
Melde es an Microsoft. Wir können da weder was dafür noch können wir es ändern.
-
@hustbaer sagte in Initialisierung eines Structs mit Konstruktor:
Wir können da weder was dafür noch können wir es ändern.
Sorry, das war jetzt nicht als Vorwurf gemeint.
-
Hehe, OK.
Aber im Ernst: du kannst das an MS melden. In Visual Studio gibt's ja den Send Feedback Button.