0

最近、私はいくつかの古いコードを書き直していました。特に、長すぎる関数を縮小しました (オーバーヘッドの削減、読みやすさの向上など)。それにより、実際に機能するものについてつまずきました:

クラス定義

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 つだけを基本クラスにキャストし、条件に基づいてプロパティの割り当てを行っています。また、これは良い習慣と見なされますか、それとも私が見ることができない重大な欠点はありますか?

4

3 に答える 3