2010-05-04 9 views
9

Der Titel ist offensichtlich, ich muss wissen, ob Methoden zusammen mit Objektinstanzen in C# serialisiert werden, ich weiß, dass sie nicht in Java, aber ich bin ein wenig neu in C#. Wenn nicht, muss ich die ursprüngliche Klasse mit dem Byte-Strom (serialisiertes Objekt) in einem Paket ablegen, wenn ich sie an einen anderen PC sende? Kann die ursprüngliche Klasse wie eine DLL-Datei sein?Werden Methoden auch zusammen mit den Datenmembern in .NET serialisiert?

+1

Für Informationen gibt es ** viele ** Serialisierungs-APIs. Sie verhalten sich anders - es klingt * wie Sie 'BinaryFormatter' verwenden, aber im Allgemeinen sollten Sie versuchen, explizit zu sein, welche API Sie verwenden. –

+0

Haben Sie Ihren Kommentar nicht erhalten? – Lisa

+0

BTW, Serialisierung hat fast nichts mit C# zu tun, und alles mit .NET zu tun. –

Antwort

14

Nein. Die Typinformationen werden zusammen mit dem Status serialisiert. Um die Daten zu deserialisieren, muss Ihr Programm Zugriff auf die Assemblys haben, die die Typen (einschließlich Methoden) enthalten.

+0

Sie sagen Assemblies, also die Methoden der ursprünglichen Klasse als DLL-Datei funktionieren gut, oder? – Lisa

+1

@Shaza: Ja. Bei beiden Seiten (Serialisierung und Deserialisierung) muss die Assembly (in der Regel DLL) den zu serialisierenden Typ enthalten. Dies muss erkennbar sein, damit der Typ von den Serialisierungsklassen korrekt instanziiert wird. –

2

Methoden werden nicht serialisiert.

Ich weiß nicht über Ihr Szenario, aber in eine Bibliothek (Assembly/Dll) und die Verwendung in das andere Ende deserialize bringt Sie alle.

Ps. Sie sollten wahrscheinlich einige Fragen mit den Faktoren in Ihrem Szenario stellen. Wenn Sie beabsichtigen, den Code & dynamisch zu senden, können Sie schreckliche Sicherheitskonsequenzen erstellen.

1

Ich war verwirrt, als .NET zuerst mit Serialisierung kam. Ich denke, es kam von der Tatsache, dass die meisten Bücher und Führer erwähnen, dass es Ihnen ermöglicht, Ihre "Objekte" als XML zu serialisieren und sie herumzubewegen, die Tatsache ist, dass Sie tatsächlich die Werte Ihres Objekts hydratisieren, damit Sie diese dehydrieren können. Zu keinem Zeitpunkt speichern Sie Ihr gesamtes Objekt auf Festplatte, da dies die DLL erfordern würde und nicht in der XML-Datei enthalten ist.

9

Es kann leichter sein, zu verstehen, wenn Sie C. Eine Klasse wie

class C 
{ 
    private int _m; 
    private int _n; 

    int Meth(int p) 
    { 
     return _m + _n + p; 
    } 
} 

gelernt habe, ist im Wesentlichen syntaktischer Zucker für

typedef struct 
{ 
    int _m; 
    int _n; 
    // NO function pointers necessary 
} C; 

void C_Meth(C* obj, int p) 
{ 
    return obj->_m + obj->_n + p; 
} 

Dies ist im Wesentlichen, wie nicht-virtuellen Methoden implementiert werden objektorientierte Sprachen. Wichtig dabei ist, dass die Methoden nicht Teil der Instanzdaten sind.

Verwandte Themen