2010-05-04 13 views
9

Il titolo è ovvio, ho bisogno di sapere se i metodi sono serializzati insieme alle istanze di oggetti in C#, so che non sono in Java ma sono un po 'nuovo in C#. Se non lo fanno, devo mettere la classe originale con il flusso di byte (oggetto serializzato) in un pacchetto quando lo mando su un altro PC? La classe originale può essere come un file DLL?Anche i metodi sono serializzati insieme ai membri dati in .NET?

+1

Per informazioni, ci sono ** lotti ** di API di serializzazione. Si comportano in modo diverso: * suona * come se stessi usando 'BinaryFormatter', ma in generale dovresti cercare di essere esplicito su quale API stai usando. –

+0

Non hai ricevuto il tuo commento? – Lisa

+0

BTW, la serializzazione non ha quasi nulla a che fare con C# e tutto ciò che riguarda .NET. –

risposta

14

No. Le informazioni sul tipo sono serializzate, insieme allo stato. Per deserializzare i dati, il tuo programma dovrà avere accesso agli assembly che contengono i tipi (compresi i metodi).

+0

Stai dicendo assembly in modo che i metodi della classe originale come file DLL funzionino bene, giusto? – Lisa

+1

@Shaza: Sì. Entrambi i lati (serializzazione e deserializzazione) devono avere l'assembly (tipicamente DLL) contenente il tipo serializzato. Questo deve essere rilevabile affinché il tipo sia istanziato correttamente dalle classi di serializzazione. –

2

I metodi non sono serializzati.

Non conosco lo scenario, ma inserendo una libreria (assembly/dll) e utilizzandolo nell'altra estremità per deserializzare si ottiene tutto.

Ps. probabilmente dovresti crearne alcune poni qualche altra domanda con i fattori coinvolti nel tuo scenario. Se si intende inviare dinamicamente il codice &, è possibile creare conseguenze di sicurezza terribili.

1

Sono stato confuso quando .NET è venuto prima con la serializzazione. Penso che sia venuto dal fatto che la maggior parte dei libri e delle guide menziona che ti permette di serializzare i tuoi "oggetti" come XML e spostarli, il fatto è che in realtà stai idratando i valori del tuo oggetto in modo da poterli disidratare. in nessun momento si sta salvando l'intero oggetto su disco poiché ciò richiederebbe la dll e non è contenuto nel file XML.

9

Può essere più facile da capire se hai imparato C. Una classe come

class C 
{ 
    private int _m; 
    private int _n; 

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

è lo zucchero essenzialmente sintattico per

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

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

Questo è essenzialmente come i metodi non virtuale sono implementate in lingue orientate agli oggetti. La cosa importante qui è che i metodi sono non parte dei dati di istanza.

Problemi correlati