2009年11月23日

FxCopに学ぶ番外編(4) : ISerializable を正しく実装します

   このエントリーをはてなブックマークに追加 Clip to Evernote

メールマガジン「C#プログラミングレッスン」では、今、[FxCopに学ぶ編] を連載中です。
そこで取上げようとしたルールで、下書きまでしたのですが、結局メルマガには書かないことにしたルールがいくつかあります。
そのまま捨ててしまうのはもったいないので、ブログに掲載します。

■独自例外クラスの書き方(3)■■

MyExceptionに独自のプロパティを追加したとします。


このコードを FxCopに食わせると、GetObjectDataの実装を型 MyException に追加してくださいという警告が出ます。

これは、独自のプロパティを正しくシリアライズするために GetObjectDataメソッドを overrideする必要があることを示しています。
独自のフィールド/プロパティを持つ例外クラスを作成する場合は、GetObjectDataをoverrideする必要があります。

GetObjectDataメソッドを実装した MyExceptionを示します。


MyException(SerializationInfo info, StreamingContext context) コンストラクタも変更されていいる点に注意してください。
これで、シリアライズ、デシリアライズに対応させることができます。

■FxCopのルール
CA2240: ISerializable を正しく実装します

  

Posted by gushwell at 23:59Comments(0)TrackBack(0)

2009年11月19日

FxCopに学ぶ番外編(3) : シリアル化コンストラクタを実装します

   このエントリーをはてなブックマークに追加 Clip to Evernote

メールマガジン「C#プログラミングレッスン」では、今、[FxCopに学ぶ編] を連載中です。
そこで取上げようとしたルールで、下書きまでしたのですが、結局メルマガには書かないことにしたルールがいくつかあります。
そのまま捨ててしまうのはもったいないので、ブログに掲載します。


前回の続きです。

■■独自例外クラスの書き方(2)■■

前回は、


と書きましたが、まだ、コンストラクタが不足しています。


というコンストラクタを定義する必要があります。
これがないと、この例外をシリアル化することができません。
例えば、ネットワーク越しにこの例外を伝えたいような場合、このコンストラクタが無いと正しく動作しません。

それには、以下のように修正する必要があります。


■FxCopのルール
CA2229: シリアル化コンストラクタを実装します

  
Posted by gushwell at 23:33Comments(0)TrackBack(0)