Initialisieren verschachtelter Objekteigenschaften

8

Ich habe eine Klasse namens Mitarbeiter, die ein Feld namens Versicherung hat, die von Typ Versicherung wie folgt ist

%Vor%

Ich habe eine andere Klasse namens Versicherung

%Vor%

Jetzt im Hauptprogramm möchte ich etwas wie

machen %Vor%

C # beschweren sich und ich weiß, wie ich es beheben kann, indem ich eine Instanz der Insurance-Klasse erstelle.

Meine Frage ist, kann ich irgendwie die Werte für die Felder auf die Art, wie ich es im Hauptprogramm mit like

tun möchte

**

%Vor%

** Ich habe es versucht

%Vor%

In der Hauptmethode, wenn ich

versuche %Vor%

Ich bekomme diesen Fehler -

Fehler 2 Mehrdeutigkeit zwischen 'ConsoleApplication1.Employee.Insurance' und 'ConsoleApplication1.Employee.Insurance' c: \ Benutzer \ Lenovo \ Dokumente \ Visual Studio 2012 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs 15 17 ConsoleApplication1

    
jhon.smith 08.08.2013, 18:28
quelle

4 Antworten

10

Sie können Insurance im Konstruktor von Employee instanziieren, damit es automatisch für Sie ausgeführt wird. Sie können die Standardwerte angeben, um sicherzustellen, dass sie bei einem späteren Zugriff noch nicht als gültig definiert sind.

%Vor%

Oder um die Klassen verschachtelt zu halten:

%Vor%     
bland 08.08.2013, 18:32
quelle
10

Ohne Änderungen an der Klasse Employee zu benötigen, könnten Sie Objektinitialisierer verwenden:

%Vor%

Alternativ und vielleicht am besten können Sie die Employee -Klasse eine neue Instanz von Insurance entweder in ihrem Konstruktor (wie in den anderen Antworten) erstellen, oder eine andere Option wäre es in% co_de zu tun % property getter selbst, daher wird es nur instanziiert, wenn Sie es verwenden. Hier ist ein Beispiel für Letzteres:

%Vor%

Schließlich würde ich vorschlagen, dass Sie keine Klassen erstellen, die alle öffentlichen Felder haben, es sei denn, Sie wissen wirklich, dass Sie das wollen. Stattdessen würde ich in Betracht ziehen, -Eigenschaften über Felder zu verwenden. Ich habe die Vorschläge anderer in den folgenden Code aufgenommen und meine eigenen bereitgestellt:

%Vor%     
Cᴏʀʏ 08.08.2013 18:30
quelle
6

Natürlich, aber wie werden Sie etwas zuweisen, das zu einem null Objekt gehört? Sie müssen Insurance im Konstruktor von Employee instanziieren.

%Vor%

EDIT Betreffend deinen Kommentar: Wenn Sie diesem Ansatz folgen, können Sie auf myEmplyee.Insurance.PolicyID mit zwei Punkten zugreifen. Der Konstruktor ist in Employee-Klasse, so dass Sie nach der Implementierung nichts mehr eingeben müssen als das, was Sie bereits versucht haben.

    
KappaG3 08.08.2013 18:31
quelle
1

Sie können einen Konstruktor für Ihren Mitarbeiter schreiben, der Insurance

instanziiert %Vor%     
Sam I am 08.08.2013 18:31
quelle

Tags und Links