Syntax für virtuelle Mitglieder

8

Betrachten Sie die folgende Klasse, die in c # .net 4.0 (normalerweise in einer nhibernate-Klasse) geschrieben ist:

%Vor%

Diese Zeile erhält eine fundierte Warnung "virtueller Memberaufruf im Konstruktor". Wo soll ich diese Sammlung initialisieren?

Grüße,

    
Calin 23.01.2011, 19:47
quelle

4 Antworten

11

Das Hintergrundfeld ist ein Weg. Ein anderer ist die Verwendung eines privaten Setter. Dies funktioniert gut in nHibernate.

%Vor%     
Matt Johnson 15.06.2011, 21:59
quelle
9

Verwenden Sie ein Hintergrundfeld und initialisieren Sie das Hintergrundfeld im Konstruktor. Alternativ können Sie die Klasse versiegeln.

%Vor%     
Vadim 23.01.2011 19:48
quelle
0

Wenn Sie die Klasse sealed erstellen, erhalten Sie auch keine Warnung (weil das Problem nur ein Problem ist, wenn Sie diese Klasse erben und das Mitglied außer Kraft setzen).

Nach OP-Kommentar bearbeiten:

Ah, richtig. Ich begegne normalerweise nur, wenn ich mit geerbten virtuellen Mitgliedern zu tun habe. Yads Antwort ist wahrscheinlich die nützlichste für Sie.

Bitte beachten Sie auch, dass Sie nicht die gesamte Eigenschaft virtuell machen müssen. Bedenken Sie Folgendes:

%Vor%

Normalerweise möchten Sie Grades in der abgeleiteten Klasse nicht auf andere Weise speichern. Sie müssen nur etwas aktualisieren, wenn es sich ändert. Auf diese Weise bieten Sie der abgeleiteten Klasse mehr Hilfestellung und Sie sind sicher, dass Sie dem Hintergrundfeld vertrauen können.

P.S. Sie wissen, dass Leute List<Grade> bearbeiten können, ohne dass Ihre Klassen dies sehen? Sie sollten in Erwägung ziehen, ObservableCollection zu verwenden, das ein Ereignis enthält, wenn die Sammlung extern geändert wird. In diesem Fall müssen Sie nur eine schreibgeschützte Grades -Eigenschaft verfügbar machen.

    
user180326 23.01.2011 19:57
quelle
-1

Erstellen Sie eine überschreibbare (virtuelle) Methode namens OnInit oder etwas Ähnliches und initialisieren Sie dort Grade und rufen Sie dann OnInit im Konstruktor auf.

Die Warnung informiert Sie darüber, dass Sie ein Verhalten erstellen, das von den Implementierern nur schwer außer Kraft gesetzt werden kann.

    
tenor 23.01.2011 19:53
quelle

Tags und Links