5

MSDN を試しましたが、Freezable から派生する例はありません。

アップデート:

はい、MSDN にはアニメーションの例がありますが、複雑すぎます。フリーザブルを理解するためのより簡単なものが必要です。

4

3 に答える 3

13

ドキュメンテーション

FreezableクラスのMSDNドキュメントの備考」セクションに、次の段落があります。

独自のフリーズ可能オブジェクトの使用と作成については、フリーズ可能オブジェクトの概要を参照してください。

この概要には、「独自のフリーズ可能クラスの作成」セクションが含まれています。このセクションには、実行したいことの理論的背景が含まれています。例を見つけるには、そのセクションの下部にあるリンクをたどってください。

カスタムFreezableクラスの例については、カスタムアニメーションサンプルを参照してください。


簡単な例を具体的に求めたので、ここに1つあります(Freezable.CreateInstanceCoreのMSDNページから採用)。理論ページの次の文を覚えておいてください。

すべてのFreezableサブクラスは、CreateInstanceCoreメソッドをオーバーライドする必要があります。クラスがすべてのデータに依存関係プロパティを使用している場合は、これで完了です。

MySimpleColorちょうど1つのブールプロパティを持つカスタムクラスを作成するとしますIsRed。このクラスをFreezableにするには、オーバーライドする必要がありますCreateInstanceCore

public class MySimpleColor : Freezable
{
    // Here are your properties
    public static readonly DependencyProperty IsRedProperty = 
        DependencyProperty.Register("IsRed", typeof(Boolean), typeof(MySimpleColor));

    // CLR accessor of your property
    public bool IsRed {
        get { return (bool)GetValue(IsRedProperty); }
        set { SetValue(IsRedProperty, value); }
    }

    // All that's needed to make this Freezable
    protected override Freezable CreateInstanceCore() {
        return new MySimpleColor();      
    }
}

それでおしまい。から継承されたコードにより、またはなどのメソッドが意図したとおりに機能Freezableすることが保証されます。FreezableFreeze()Clone()

于 2011-09-01T10:52:30.983 に答える
1

何を試しましたか? このリンクは、抽象Freezableクラスから継承するために必要なものを明確に示しています。

FreezableはDependencyObjectの一種であるため、依存関係プロパティシステムを使用します。クラスプロパティは依存関係プロパティである必要はありませんが、Freezableクラスは依存関係プロパティを念頭に置いて設計されているため、依存関係プロパティを使用すると、作成する必要のあるコードの量を減らすことができます。依存関係プロパティシステムの詳細については、依存関係プロパティの概要を参照してください。

すべてのFreezableサブクラスは、CreateInstanceCoreメソッドをオーバーライドする必要があります。クラスがすべてのデータに依存関係プロパティを使用している場合は、これで完了です。

クラスに非依存プロパティデータメンバーが含まれている場合は、次のメソッドもオーバーライドする必要があります。

  • CloneCore

  • CloneCurrentValueCore

  • GetAsFrozenCore

  • GetCurrentValueAsFrozenCore

  • FreezeCore

また、依存関係プロパティではないデータメンバーにアクセスして書き込む場合は、次のルールに従う必要があります。

非依存プロパティデータメンバーを読み取るAPIの先頭で、ReadPreambleメソッドを呼び出します。

非依存プロパティデータメンバーを書き込むAPIの開始時に、WritePreambleメソッドを呼び出します。(APIでWritePreambleを呼び出した後、非依存関係のプロパティデータメンバーも読み取る場合は、ReadPreambleを追加で呼び出す必要はありません。)

非依存プロパティデータメンバーに書き込むメソッドを終了する前に、WritePostscriptメソッドを呼び出します。

クラスにDependencyObjectオブジェクトである非依存関係プロパティのデータメンバーが含まれている場合は、メンバーをnullに設定している場合でも、値を変更するたびにOnFreezablePropertyChangedメソッドを呼び出す必要があります。

于 2011-09-01T10:52:54.497 に答える
0

Freezable Objects Overview を確認してください。記事の最後にサンプルがあります。

于 2011-09-01T10:54:29.897 に答える