2009-08-26 19 views

risposta

13

protobuf-net dipende attualmente dal funzionamento di un costruttore senza parametri.

Tuttavia, il costruttore non deve essere pubblico (it will use reflection if need be to invoke it) in modo che sia possibile definire il costruttore privato richiesto solo per l'uso da protobuf-net (aggiungendo un commento sul motivo) e gestire i problemi specifici relativi alla serializzazione.

Ciò impedisce al resto della propria API di creare istanze "illegali".

Marc sottolinea che se si sta parlando dell'oggetto messaggio più esterno, è possibile anche creare l'oggetto autonomamente e chiamare Serializer.Merge. Ma se ha bisogno di creare un oggetto (perché attualmente ha un'istanza nulla o per nuovi elementi in una lista/matrice), cerca un costruttore predefinito.

+0

quando viene chiamato il costruttore senza parametri? Prima che gli altri campi vengano aggiornati? – mcmillab

4

ShuggyCoUk ha ragione su di esso utilizzando il costruttore senza parametri.

Solo per completezza, tuttavia, se si sta parlando dell'oggetto messaggio più esterno, è possibile anche creare personalmente l'oggetto e chiamare Serializer.Merge. Ma se ha bisogno di creare un oggetto (perché attualmente ha un'istanza null o per nuovi elementi in una lista/matrice), cerca un costruttore predefinito.

ho suppongo che avrei potuto anche fornire un certo margine di profitto nel l'attributo di dire "basta creare un oggetto grezzo tramite FormatterServices", ma questo si sente inutile (a fronte di un costruttore senza parametri privato), e potrebbe non funzionare su tutte le piattaforme (Silverlight, CF, ecc. - sono probabili problemi).

+0

Sto supponendo che questo è ciò che hai fatto ('FormatterServices') con l'opzione SkipConstructor che è disponibile in questi giorni? – DeCaf

+0

@DeCaf si, è quello che fa –

Problemi correlati