Hat sich das Design von Marker -Schnittstellen wie das serialisierbare oder klonbare Klonable von Java in C#entwickelt?

StackOverflow https://stackoverflow.com/questions/6317941

Frage

Java bietet java.io.Serializable und java.lang.Cloneable in seiner Standardbibliothek (und besondere Unterstützung für die Sprache und der JVM) für Aufgaben zur Deserialisierung/Serialisierung/Klonen.

Hat C# einen anderen Weg gewählt, um diese Funktionalität bereitzustellen, wie unterscheidet sich die Implementierung und den Code von Java und warum wurde sie so gemacht?

Warum verwendet C# als Beispiel sowohl ein Attribut (Annotation) als auch eine Schnittstelle zur Serialisierung?

War es hilfreich?

Lösung

.NET verwendet nicht ISerializable als markierende Schnittstelle. Es fungiert nicht nur als Marker, sondern ermöglicht es Ihnen auch, genau zu steuern, wie .NET die Klasse durch Implementierung serialisieren wird GetObjectData und ein Konstruktor, der die geeigneten Argumente nimmt.

Das Attribut wird verwendet, wenn die Klasse serialisiert werden kann, aber Sie möchten Ihr eigenes Serialisierungsverhalten nicht definieren.

Also: Verwenden ISerializable Wenn Sie Ihr eigenes Serialisierungsverhalten definieren möchten; oder verwenden Sie die [Serializable] Attribut, wenn Sie es dem Serialisierungsformater überlassen möchten.

Würde ich es Evolution nennen? Ich weiß nicht. .NET bietet Ihnen nur unterschiedliche Flexibilität.

Andere Tipps

Wenn Sie etwas über die Serialisierung wollen: Überprüfen Sie dies

Ich glaube nicht, dass C# sich weiterentwickelt hat. Vielmehr haben sie beide Dinge repariert:

  • Die Serialisierung in Java ist nicht sehr sauber: Deserialisierung beinhaltet Objekt "Erstellung", ohne einen Konstruktor aufzurufen. Der gesamte Prozess kann die Laufzeit -Rennstufe private Methoden usw. enthalten. die technischen Daten Wenn Sie neugierig sind.

  • Cloneable ist einfach einfach gebrochen. Es sollte keine Markierungsschnittstelle sein, sondern die angeben clone() Methode. Wie du hast Cloneables können Sie nicht clone().

Grundsätzlich gibt es viele Dinge in Java, hauptsächlich aus den Tagen vor 1,2 Tagen, die ziemlich gebrochen/durcheinander/unrein/was auch immer sind.

Ich bin mir nicht sicher, was Sie unter "Evolved" meinen, wenn ich denke, der Trend geht eher zu Attributen als zu Marker -Schnittstellen. Ich weiß nicht, ob Java in letzter Zeit auch so gegangen ist.

Die Serialisierung in der CLR wird beispielsweise in ihrer grundlegendsten Form mit Attributen gezeigt, obwohl Sie einige nicht-marker-Schnittstellen implementieren können, die Ihnen mehr Kontrolle über den Prozess geben, wenn Sie ihn benötigen.

Marker -Schnittstellen sind wahrscheinlich eine der schlimmsten Entscheidungen, die jemals in Java implementiert wurden. Ich meine, schau dir nur an, wie nutzlos klonbar war, weil niemand eine öffentliche Klon () -Methode in der Schnittstelle definiert hat.

.NET, die nicht in diese Richtung geht (zumindest weiß ich keine Schnittstellen in dieser Richtung) ist weniger eine Entwicklung und vielmehr eine Aufgabe des gesamten Begriffs. Eine andere Richtung, die immer mehr eingenommen zu werden scheint, scheint Annotationen zu sein, die ich davon ausgehe, dass Sie als "Marker" sehen können, aber auf grundlegenderer Ebene (z. B. bin ich mir ziemlich sicher, ob Java heute transient implementiert wäre und eine Annotation und eine Annotation sein würde und kein Qualifikationsspiel)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top