継承クラスに対して親クラスで定義された static プロパティを更新する場合の影響範囲
今まで動きを勘違いしていた(と云うかちゃんと認識出来ていなかった)のでメモ。
親クラスで定義された static プロパティについて、継承クラスに対して値をセットすると、親クラス側(とその親クラスを継承している別のクラス)の値も更新されるんですね。
# 「親クラスの値を共有する」と言った方が正しいですかね。
で、この伝播を断ち切りたい場合、継承クラス側でプロパティを隠蔽する必要がある、と。
using System; class Foo { public static string Hoge { get; set; } public static string Fuga { get; set; } static Foo() { Hoge = "Foo(Hoge)"; Fuga = "Foo(Fuga)"; } } class Bar : Foo { public new static string Fuga { get; set; } } class Baz : Foo { public new static string Fuga { get; set; } } class Qux { static void Main() { Bar.Hoge = "Bar(Hoge)"; Baz.Hoge = "Baz(Hoge)"; Bar.Fuga = "Bar(Fuga)"; Baz.Fuga = "Baz(Fuga)"; Console.WriteLine("Foo: Hoge = {0}, Fuga = {1}", Foo.Hoge, Foo.Fuga); Console.WriteLine("Bar: Hoge = {0}, Fuga = {1}", Bar.Hoge, Bar.Fuga); Console.WriteLine("Baz: Hoge = {0}, Fuga = {1}", Baz.Hoge, Baz.Fuga); } }
Foo: Hoge = Baz(Hoge), Fuga = Foo(Fuga) Bar: Hoge = Baz(Hoge), Fuga = Bar(Fuga) Baz: Hoge = Baz(Hoge), Fuga = Baz(Fuga)
# とあるライブラリを作成していて、ふと気になって調べてみたら。。。
# ……自作ライブラリの実装を変えないと><