最近,我正在重写一些旧代码,特别是收缩太长的函数(减少开销,扩展可读性等)。因此,我偶然发现了一些实际有效的东西:
类定义
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?
有人可以向我解释这是如何工作的吗?这是什么法术?当然,我可以以相同的方式处理这两个实例,因为它们共享一个公共基类,但我只是将其中一个转换为基类,并且我正在根据条件进行属性分配。此外,这是否被认为是一种好的做法,还是有什么我看不到的重大缺点?