WARNUNG für Benutzer von WCF-Teilklassen
Wenn Sie versuchen, eine Eigenschaft zu einer WCF-Proxyklasse hinzuzufügen (die von Add Service Reference generiert wird), werden Sie vielleicht überrascht sein, dass private Felder nicht initialisiert werden, weil offenbar es wird überhaupt kein Konstruktor aufgerufen .
Wenn Sie versuchen, dies zu tun (wie in einigen anderen Antworten vorgeschlagen), wird es nie aufgerufen werden:
private bool _sendEmail = true;
Dies hat nichts damit zu tun, ob sich das Feld in einer Teilklasse befindet oder nicht.
Sie müssen lediglich ein [OnDeserialized] Attribut, mit dem Sie weitere Initialisierungen für das Objekt vornehmen können. Dies ist Teil von System.Runtime.Serialization und ist daher nur im Kontext der Serialisierung nützlich, wenn man DatenVertragSerialisierer .
public partial class EndOfDayPackageInfo
{
[OnDeserialized()]
public void Init(StreamingContext context)
{
_sendEmail = true;
}
private bool _sendEmail;
public bool SendEmail
{
get
{
return _sendEmail;
}
set
{
_sendEmail = value;
RaisePropertyChanged("SendEmail");
}
}
}
Ein anderer Ansatz ist das "faule Laden" der Eigenschaft - aber dieser Ansatz ist viel weniger elegant.
private bool _sendEmail;
private bool _sendEmailInitialized;
public bool SendEmail
{
get
{
if (!_sendEmailInitialized)
{
_sendEmailInitialized = true;
_sendEmail = true; // default value
}
return _sendEmail;
}
set
{
if (!_sendEmailInitialized)
{
// prevent unwanted initialization if 'set' is called before 'get'
_sendEmailInitialized = true;
}
_sendEmail = value;
RaisePropertyChanged("SendEmail");
}
}