DependencyObjectってシリーズ
思えば地味に結構書いてる。もう打ち止めかと思ったらRさんの所の記事にあったOverrideMetadataメソッドについて何も書いてなかった。
自分用のメモのためにも書く!
OverrideMetadataをやると、DependencyPropertyのメタデータをオーバーライドできちゃう。
DependencyPropertyのメタデータについては、その2で色々書いてる。
OverrideMetadataメソッドの使いどころは、継承先でデフォルト値の書き換えとかによく使われそう。ということで、そのパターンをやってみようと思う。
まず、Isonoクラスを作って依存プロパティのNameを作る。これのデフォルト値を「いその」にする。
class Isono : DependencyObject
{
public static readonly DependencyProperty NameProperty =
DependencyProperty.Register("Name", typeof(string), typeof(Isono), new PropertyMetadata("いその"));
public string Name
{
get { return (string)GetValue(NameProperty); }
set { SetValue(NameProperty, value); }
}
}
次に、これを継承してFugutaクラスを作ってみる。staticコンストラクタでNamePropertyのOverrideMetadataを呼んでデフォルト値を「ふぐた」に置き換える。
class Fuguta : Isono
{
static Fuguta()
{
NameProperty.OverrideMetadata(typeof(Fuguta), new PropertyMetadata("ふぐた"));
}
}
デフォルト値が書き換わってるか確認してみる。
using System;
namespace WpfOverride
{
class Program
{
static void Main(string[] args)
{
var isono = new Isono();
// いその と表示される。
Console.WriteLine(isono.Name);
var fuguta = new Fuguta();
// ふぐた と表示される。
Console.WriteLine(fuguta.Name);
}
}
}
実行結果
いその
ふぐた
以上!