最近、私はいくつかの古いコードを書き直していました。特に、長すぎる関数を縮小しました (オーバーヘッドの削減、読みやすさの向上など)。それにより、実際に機能するものについてつまずきました:
クラス定義
public abstract class BaseClass {
public string BaseProperty { get; set; }
}
public sealed class ClassA : BaseClass {
public string PropertyA { get; set; }
}
public sealed class ClassB : BaseClass {
public string PropertyB { get; set; }
}
実行
ClassA a = null;
ClassB b = new ClassB();
(a == null ? (BaseClass)b : a).BaseProperty = "What would Jon Skeet think about this?";
Console.WriteLine(b.BaseProperty);
出力
What would Jon Skeet think about this?
誰かがこれがどのように機能するかを説明できますか? この魔法は何ですか?もちろん、共通の基本クラスを共有しているので、両方のインスタンスを同じ方法で処理できますが、そのうちの 1 つだけを基本クラスにキャストし、条件に基づいてプロパティの割り当てを行っています。また、これは良い習慣と見なされますか、それとも私が見ることができない重大な欠点はありますか?