Question

Pour autant que je comprends, l'interface IDeserializationCallback et l'événement OnDeserialized peuvent tous deux être utilisés lorsqu'un objet a besoin pour accomplir une tâche après avoir été désérialisé.

IDeserializationCallback:

[Serializable]
public class Foo : IDeserializationCallback
{
    public void OnDeserialization(object sender)
    {
         // initialize unserialized fields etc.
    }
}

événement OnDeserialized:

[Serializable]
public class Foo
{
    [OnDeserialized]
    public void OnDeserialized(StreamingContext context)
    {
         // initialize unserialized fields etc.
    }
}

Y a-t-il des pros spécifiques / inconvénients ou des scénarios où vous choisiriez un sur l'autre?

Était-ce utile?

La solution

Je me suis demandé la même chose. En ce qui concerne avantages / inconvénients vont, je ne peux raison que l'interface a un avantage en ce qu'elle vous oblige à mettre en œuvre la signature de la méthode correcte où, comme la version d'attribut vous laissera heureusement compilez votre classe, peu importe ce que votre signature de la méthode ressemble .

Autres conseils

Ces deux servent des objectifs différents et ne peuvent être utilisés de façon interchangeable. Dans la plupart des cas, vous serez probablement mieux servis par l'interface.

Regardez ici pour une explication: http: //social.msdn .microsoft.com / Forums / en-US / netfxremoting / fil / 311b2b57-6b0a-49ed-aa96-84f69d51da0f

poste de Darren Headrick de lien ci-dessus (pour être complet):

DeserializationCallback.OnDeserialization « fonctionne quand le graphe entier de l'objet a été désérialisé. » (Lien ).

L'événement OnDeserialized cependant « Utilisez le OnDeserializedAttribute lorsque vous avez besoin de fixer des valeurs sur un objet désérialisé après qu'il a été désérialisée et avant que le graphique est retourné. Cet attribut peut être utilisé à la place de l'interface IDeserializationCallback. » ( ).

Depuis l'attribut OnDeserialized peut être utilisé pour modifier le graphe d'objet, il est appelé avant OnDeserialization (qui signifie le graphe d'objet est dans son état final).

D'autres discussions sur ce

scroll top