基类实例分配给派生类成员的较短版本

本文关键字:版本 成员 实例 分配 派生 基类 | 更新日期: 2023-09-27 17:59:53

考虑这个小例子:

public class BaseClass { }
public class DerivedClass : BaseClass { public int Field; }
public static class Program
{
    public static void Main( string[] args)
    {
        BaseClass baseVar = new DerivedClass();
        if( baseVar is DerivedClass )
        {
            var derivedVar = (DerivedClass)baseVar;
            derivedVar.Field = 1;
            baseVar = derivedVar;
        }
    }
}

我在if条件中有很多这样的代码。有没有这样的简写版本,这样我就不必创建临时派生变量了?

基类实例分配给派生类成员的较短版本

一种方法是安全的类型转换:

BaseClass base = new DerivedClass();
DerivedClass derived = base as DerivedClass;
derived?.Field = 1;

注意:as是安全的强制转换-它将强制转换或返回null。?是一个C#特性,当变量不是nullPtr时,方法或赋值正在执行。您不必编写baseVar = derivedVar,因为两者都是通过引用绑定的。当您强制转换并更改字段时,引用根本没有更改。

此外,这里还有一篇关于C#6.0中null传播的MSDN文章https://msdn.microsoft.com/de-de/magazine/dn802602.aspx

为了合规性,这是OP选择的真实:

BaseClass base = new DerivedClass();
(base as DerivedClass)?.Field = 1;

分配

baseVar = derivedVar;

是多余的,所以你可以只做

if( baseVar is DerivedClass ) {
    ((DerivedClass)baseVar).Field = 1;
}