0

設計時にアルファベット順にシリアル化されているプロパティを中継するのが難しいクラスがあります。つまり、プロパティZはプロパティAの前にシリアル化する必要があります。

この問題は、プロパティプロパティZが変更されるたびにプロパティAをクリアするために発生します。これはInitializeComponentで発生します。FirstTimeフラグを設定することでこの問題を回避しますが、それは厄介なようです。

私はここで解決策を見つけました(スペイン語から翻訳されました)が、それはやり過ぎのようです。

問題を処理する正しい方法は何ですか?

4

2 に答える 2

2

ここでのベスト プラクティスは、すべての設計時のプロパティが互いに独立するようにクラスを書き直すことです。これが、Microsoft が提供するすべてのデザイン可能な型のしくみです。

私はこれまで何度もこの罠に陥りそうになりましたが、常に面白い相互依存関係を設計時ではなく実行時にのみ発生させることで解決しました。

于 2009-10-21T08:35:21.287 に答える
1

私は「やり過ぎ」ソリューションの作成者です。:-) に基づくソリューションが気に入らない場合はCodeDomSerializer、プロパティを任意の順序で初期化できるようにクラスを設計することが唯一の選択肢であると思います (これはとにかく良い習慣と見なされます)。たとえば、セッターが初めて呼び出された場合、プロパティ A をクリアしないようにプロパティ Z を設定できますか? 何かのようなもの:

bool propertyZHasBeenSet=false;
SomeType propertyZ
{
    get {
        //Property getter
    }

    set {
        if(propertyZHasBeenSet) {
            //Clear property A
        } else {
            propertyZHasBeenSet=true;
        }
        //The remaining of the property setter
    }
}

同じことを達成するためのより良い方法があるに違いないと確信していますが、アイデアはわかります。

于 2009-10-21T08:24:22.057 に答える