5

重複の可能性:
コンストラクター署名を定義するインターフェース?

クラスとインターフェースの階層が混在しています。

シリアル化を使用するには、各クラスにデフォルトのコンストラクターが存在する必要があります。コンパイラーが、デフォルトのコンストラクターが階層のどこかに欠落していることを教えてくれれば、私は本当に感謝します。(後のテストではなく、コンパイル時に問題を確認します)

マークアップや属性が欲しいのですが、何も見つかりませんでした。

何かのようなもの:

[ForceDefaultConstructor]
interface IVeryQuickSerializable
{   
    Serialize();
    Deserialize();
}

素晴らしいことだ!

しかし、そのようなものは非常にありがたいです。

制限があります:シリアル化を変更できません。それを一般的にすることで問題は解決しますが、私には情報源がありません。ラッパーを作成することでうまくいくかもしれませんが、トップレベルのシリアル化インターフェイス(変更されない場合があります)から派生したオブジェクトの抜け穴があります。

4

2 に答える 2

7

インターフェイスまたは属性でそれを行うことはできません。

2つの考え:

  • 統合テスト: リフレクションを使用して関連するすべてのクラスを見つけ、テストでそれらをチェックします
  • T : new()句を使用する汎用 API でシリアライゼーション コードを公開します。つまり、

    void Serialize<T>(T obj, ...) where T : IVeryQuickSerializable, new()
    
于 2012-06-20T18:52:29.787 に答える
0

おそらくもっと良い解決策がありますが、ビルド後のイベント中にリフレクションを使用してアセンブリを検査するアプリケーションを作成できます。

于 2012-06-20T18:54:16.293 に答える