MSDN を試しましたが、Freezable から派生する例はありません。
アップデート:
はい、MSDN にはアニメーションの例がありますが、複雑すぎます。フリーザブルを理解するためのより簡単なものが必要です。
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
することが保証されます。Freezable
Freeze()
Clone()
何を試しましたか? このリンクは、抽象Freezableクラスから継承するために必要なものを明確に示しています。
FreezableはDependencyObjectの一種であるため、依存関係プロパティシステムを使用します。クラスプロパティは依存関係プロパティである必要はありませんが、Freezableクラスは依存関係プロパティを念頭に置いて設計されているため、依存関係プロパティを使用すると、作成する必要のあるコードの量を減らすことができます。依存関係プロパティシステムの詳細については、依存関係プロパティの概要を参照してください。
すべてのFreezableサブクラスは、CreateInstanceCoreメソッドをオーバーライドする必要があります。クラスがすべてのデータに依存関係プロパティを使用している場合は、これで完了です。
クラスに非依存プロパティデータメンバーが含まれている場合は、次のメソッドもオーバーライドする必要があります。
CloneCore
CloneCurrentValueCore
GetAsFrozenCore
GetCurrentValueAsFrozenCore
FreezeCore
また、依存関係プロパティではないデータメンバーにアクセスして書き込む場合は、次のルールに従う必要があります。
非依存プロパティデータメンバーを読み取るAPIの先頭で、ReadPreambleメソッドを呼び出します。
非依存プロパティデータメンバーを書き込むAPIの開始時に、WritePreambleメソッドを呼び出します。(APIでWritePreambleを呼び出した後、非依存関係のプロパティデータメンバーも読み取る場合は、ReadPreambleを追加で呼び出す必要はありません。)
非依存プロパティデータメンバーに書き込むメソッドを終了する前に、WritePostscriptメソッドを呼び出します。
クラスにDependencyObjectオブジェクトである非依存関係プロパティのデータメンバーが含まれている場合は、メンバーをnullに設定している場合でも、値を変更するたびにOnFreezablePropertyChangedメソッドを呼び出す必要があります。