Serialisierung und Vererbung: Wie base.GetObjectData aufrufen?
-
Wie bringe ich die abgeleitete Klasse dazu, die Serialisierungsfunktion der Basisklasse (Zeile 34) aufzurufen?
[Serializable] class Basis : ISerializable { public string Wert; public Basis() { } protected Basis(SerializationInfo info, StreamingContext context) { Wert = info.GetString("Wert"); } void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("Wert", Wert); } } [Serializable] class Abgeleitet : Basis, ISerializable { public string NeuerWert; public Abgeleitet() { } private Abgeleitet(SerializationInfo info, StreamingContext context) : base(info, context) { NeuerWert = info.GetString("Neu"); } void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { // ??? info.AddValue("Neu", NeuerWert.ToLower()); } }
-
((ISerializable)base).GetObjectData(info, context);
-
Wieso nicht so?
[Serializable] class Basis : ISerializable { public string Wert; public Basis() { } protected Basis(SerializationInfo info, StreamingContext context) { Wert = info.GetString("Wert"); } public virtual void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("Wert", Wert); } } [Serializable] class Abgeleitet : Basis { public string NeuerWert; public Abgeleitet() { } private Abgeleitet(SerializationInfo info, StreamingContext context) : base(info, context) { NeuerWert = info.GetString("Neu"); } public override void GetObjectData(SerializationInfo info, StreamingContext context) { base.GetObjectData(info, context); info.AddValue("Neu", NeuerWert.ToLower()); } }
Grüssli
-
Dravere schrieb:
Wieso nicht so?
Und was machst du, wenn du von zwei Interfaces ableitest, die beide eine Funktion haben, die zufällig gleich heißen? IMath.GetProduct, IMarket.GetProduct
-
Jammel schrieb:
Dravere schrieb:
Wieso nicht so?
Und was machst du, wenn du von zwei Interfaces ableitest, die beide eine Funktion haben, die zufällig gleich heißen? IMath.GetProduct, IMarket.GetProduct
Der Fall ist höchst selten. Deswegen implementiert man doch nicht alle Interfaces explizit. Ich mache eine explizite Implementierung erst dann, wenn es auch wirklich nötig ist.
Grüssli