2012-03-12 18 views
1

私はC#でオブジェクトのシリアライズに慣れてきています。デシリアライゼーションコンストラクタがINSTEADのデフォルトコンストラクタまたはIN ADDITION TOのどちらかと呼ばれるかどうか疑問に思っています。それが追加であれば、どのような順序で呼ばれていますか?たとえば、次のようにC#デシリアライゼーションコンストラクタはデフォルトのコンストラクタの代わりに呼び出されますか?

[Serializable()] 
public class ReadCache : ISerializable 
{ 
    protected ArrayList notifiedURLs; 

    // Default constructor 
    public ReadCache() 
    { 
     notifiedURLs = new ArrayList(); 
    } 

    // Deserialization constructor. 
    public ReadCache(SerializationInfo info, StreamingContext ctxt) 
    { 
     //Get the values from info and assign them to the appropriate properties 
     notifiedURLs = (ArrayList)info.GetValue("notifiedURLs", typeof(ArrayList)); 
    } 
} 

答えて

2

それは「ではなく」デフォルトで呼び出されますありません - しかし、あなたはこのような何かをあなたのリストを初期化することができますこの:

public ReadCache(SerializationInfo info, StreamingContext ctxt) 
    : this() 
{ 
    //Get the values from info and assign them to the appropriate properties 
    notifiedURLs = (ArrayList)info.GetValue("notifiedURLs", typeof(ArrayList)); 
} 

"を...注意してください() " - 構文 - あなたの特別なケースでは、あなたがする必要はありません!

+0

Gotcha。いつ:this()が使用され、どのコードが最初に実行されますか?デフォルトコンストラクタコードまたは逆シリアル化コンストラクタコード? – Doug

+1

あなたの「デフォルト」コンストラクタ内の部品 - それほど有用ではないと思いますが、そうではありませんか? – Carsten

+0

ありがとうございました。 – Doug

関連する問題