- PR -

シリアライズ処理について教えてください

1
投稿者投稿内容
kiyo
会議室デビュー日: 2002/02/04
投稿数: 4
投稿日時: 2002-02-04 23:59
こんにちわ、はじめまして、中川ともうす者です。

シリアライズ処理についてわかる方おられましたら教えてください。

コード:


using System.Xml.Serialization;

public class TestClass1 {
string a;
string b;

public static void Main()
{
XmlSerializer s = new XmlSerializer(typeof(TestClass));
}
}



コード:


using System.Xml.Serialization;

public class TestClass {
string a;
string b;

public TestClass(string c) {}
public TestClass() {}

public static void Main()
{
XmlSerializer s = new XmlSerializer(typeof(TestClass));
}
}


は正常に動作するのに、

コード:


using System.Xml.Serialization;

public class TestClass {
string a;
string b;

public TestClass(string c) {}

public static void Main()
{
XmlSerializer s = new XmlSerializer(typeof(TestClass));
}
}


は、
「TestClass に既定のパブリック コンストラクタが含まれていないため、シリアル化できません。」
という例外が発生します。これはなぜでしょうか?

既定のパブリック コンストラクタは1番目の例でも含まれていませんが、こちらはエラーになりません。

[ メッセージ編集済み 編集者: kiyo 編集日時 2002-02-05 00:00 ]
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-02-05 15:47
 コンストラクタが1つも無いクラスは、引数が無く何もしないコンストラクタがあると仮定して処理されますが、引数のあるコンストラクタが1個でもあると、引数の無いコンストラクタは存在しないと見なされます。
 という問題でしょうか?
_________________
kiyo
会議室デビュー日: 2002/02/04
投稿数: 4
投稿日時: 2002-02-11 00:40
autumn様、ありがとうございます。

やはりそういう仕様が存在するのですね。
納得しました。今後ともよろしくお願いします。
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-02-11 19:13
引用:

autumnさんの書き込み (2002-02-05 15:47) より:
 コンストラクタが1つも無いクラスは、引数が無く何もしないコンストラクタがあると仮定して処理されますが、



正確には、コンストラクタがないクラスをコンパイルするときに、コンパイラがデフォルトコンストラクタ(引数がないコンストラクタ)を挿入します。仮定するわけではなく、実際にコンストラクタが追加されます。このコンストラクタは、単にベースクラスのデフォルトコンストラクタを呼ぶだけのコードが入っています。
1

スキルアップ/キャリアアップ(JOB@IT)