object-initializers

___ qstntxt ___

Wenn ich ein Objekt unter Verwendung der neuen Objektinitialisierer in C # initialisiere, kann ich keine der Eigenschaften innerhalb der Klasse verwenden, um eine weitere Aktion auszuführen, und ich weiß nicht warum.

Mein Beispielcode:

%Vor%

Innerhalb der Personenklasse ist x gleich 0 (Standard):

%Vor%

Aber person.Age ist gleich 29. Ich bin sicher, das ist normal, aber ich würde gerne verstehen warum.

    
___ answer558965 ___

Beachten Sie als wichtiges technisches Detail:

%Vor%

entspricht:

%Vor%

ist aber nicht äquivalent zu:

%Vor%     
___ answer558929 ___

Die Eigenschaften werden für Name und Alter festgelegt, nachdem der Konstruktor 'public Person ()' beendet wurde.

%Vor%

entspricht

%Vor%

Also, im Konstruktor wurde Age 29 noch nicht.

(tempPerson ist ein eindeutiger Variablenname, den Sie nicht in Ihrem Code sehen, der nicht mit anderen auf diese Weise konstruierten Personeninstanzen kollidiert. tempPerson ist notwendig, um Multi-Threading-Probleme zu vermeiden; seine Verwendung stellt sicher, dass das neue Objekt nicht funktioniert wird erst nach der Ausführung des Konstruktors und nach der Initialisierung aller Eigenschaften für einen anderen Thread verfügbar.)

Wenn Sie die Age-Eigenschaft im Konstruktor bearbeiten möchten, schlage ich vor, dass Sie einen Konstruktor erstellen, der das Alter als Argument verwendet:

%Vor%     
___ qstnhdr ___ Was mache ich falsch mit C # Objektinitialisierern? ___ answer558971 ___

Technisch gesehen ist dieser Code:

%Vor%

ist identisch mit diesem Code:

%Vor%

was etwas anders ist als das was andere gepostet haben:

%Vor%

Dieser Unterschied ist entscheidend, wenn Ihre Anwendung Multithreading verwendet.

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer558930 ___

Es sieht so aus, als ob Sie versuchen, auf %code% im Konstruktor des Objekts zuzugreifen. Die Werte des Objektinitialisierers werden erst festgelegt, nachdem der Konstruktor ausgeführt wurde.

Versuchen Sie Folgendes:

%Vor%

BEARBEITEN als Antwort auf einen Kommentar

Wenn Sie im Konstruktor selbst auf %code% zugreifen müssen, müssen Sie einen expliziten Konstruktor mit den erforderlichen Parametern erstellen und diesen anstelle der Syntax des Objektinitialisierers verwenden. Zum Beispiel:

%Vor%     
___ answer559053 ___

Nun, wie andere schon sagten, der parameterlose Konstruktor wurde zuerst ausgeführt, daher Ihr Dilemma.

Ich muss jedoch fragen, ob Sie ein Feld anstelle einer automatischen Eigenschaft für Ihre Age-Variable festgelegt haben?

%Vor%

Sie könnten %code% anstelle von %code% verwenden, wenn das ausreicht, oder wenn Sie wirklich %code% verwenden müssen:

%Vor%

Was auch immer passender ist.

    
___ tag123Objektinitialisierer ___ Objektinitialisierer ermöglichen Ihnen, allen zugänglichen Feldern oder Eigenschaften eines Objekts zum Zeitpunkt der Erstellung Werte zuzuweisen, ohne dass ein Konstruktor gefolgt von Zeilen von Zuweisungsanweisungen aufgerufen werden muss. ___ answer558934 ___

Ihre Codezeile ist identisch mit:

%Vor%

was identisch ist mit:

%Vor%

Wie Sie sehen können; Wenn der Konstruktor ausgeführt wird, ist %code% noch nicht gesetzt.

    
___
5
Antworten

Können Sie eine Objektinstanz aus JSON in .NET instanziieren?

Da Objekt-Initialisierer JSON sehr ähnlich sind, gibt es jetzt anonyme Typen in .NET. Es wäre cool, eine Zeichenfolge wie JSON zu verwenden und ein anonymes Objekt zu erstellen, das die JSON-Zeichenfolge darstellt. Verwenden Sie Objektinitial...
14.10.2008, 01:30
3
Antworten

c # Konstruktoren vs Auto-Eigenschaften und Objektinitialisierer

Ich habe die automatischen Eigenschaften sehr oft verwendet, aber ich bin mehr und mehr davon entfernt, Klassen mit schreibgeschützten Stützfeldern einzurichten, die im Konstruktor initialisiert wurden. Ich entferne alle Setter und füge nur die...
03.09.2010, 23:02
6
Antworten

Was mache ich falsch mit C # Objektinitialisierern?

Wenn ich ein Objekt unter Verwendung der neuen Objektinitialisierer in C # initialisiere, kann ich keine der Eigenschaften innerhalb der Klasse verwenden, um eine weitere Aktion auszuführen, und ich weiß nicht warum. Mein Beispielcode: %Vor...
17.02.2009, 22:03