You need to enable JavaScript to run this app. C#中基类类型参数如何调用派生类独有的方法
优惠活动
大模型
产品
解决方案
定价
更多

C#中基类类型参数如何调用派生类独有的方法

问题原因

is运算符仅会返回类型是否匹配的布尔结果,不会修改变量的编译时类型,因此判断后b仍然被识别为Base类,自然无法调用仅Derivative类存在的foo方法。

可用解决方案

所有方案都不会拷贝原对象,完全保留原引用的指向,修改转换后变量的属性会同步到原实例。

1. 模式匹配(推荐,C# 7.0+支持)

在is判断时直接声明转换后的目标类型变量,匹配成功会自动完成赋值:

void Action (Base b) {
    if (b is Derivative derivative)
    {
        derivative.foo();
    }
}

2. 显式强制转换(兼容旧版本C#)

类型判断通过后,强制把Base类型变量转换为Derivative类型再调用方法:

void Action (Base b) {
    if (b is Derivative)
    {
        // 单次调用可以直接转完调用
        ((Derivative)b).foo();
        // 需要多次调用可以先存为局部变量
        // Derivative d = (Derivative)b;
        // d.foo();
    }
}

3. as运算符转换

先用as尝试做类型转换,转换失败会返回null,判断非空后即可调用方法:

void Action (Base b) {
    Derivative d = b as Derivative;
    if (d != null)
    {
        d.foo();
    }
}

内容的提问来源于stack exchange,提问作者Lae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 16:24:10