You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现参数及返回值为实现类类型的泛型抽象函数?

实现方案说明

这个需求其实是典型的递归泛型场景,你原本的写法直接在抽象方法上添加泛型约束是行不通的,但我们可以通过调整抽象类的定义来完美实现你想要的效果。

正确的抽象类定义

首先要把泛型参数放到类级别,并加上递归约束,确保子类继承时传入的泛型类型就是自身:

public abstract class BaseClass<T> where T : BaseClass<T>
{
    public abstract T DoSomething(T variable);
}

子类实现示例

这样你的具体子类就可以按照预期的方式重写方法,参数和返回值都限定为子类自身:

public class Class1 : BaseClass<Class1>
{
    public override Class1 DoSomething(Class1 variable)
    {
        // 这里编写你的业务逻辑
        Console.WriteLine($"处理Class1实例:{variable}");
        return variable;
    }
}

为什么原写法不可行?

你最初尝试在抽象方法上定义泛型T并加约束,这种写法的问题在于:子类重写时可以返回任意继承自父类的类型,而不是必须返回自身,完全无法满足你“参数和返回值均为实现类本身”的要求。

而递归泛型约束where T : BaseClass<T>是C#里实现“自类型”需求的常用方案,虽然它不能从语法上完全强制子类必须传入自身类型(比如有人可以恶意写class BadClass : BaseClass<Class1>),但在常规的开发规范下,大家都会遵循传入自身类型的约定,完全能覆盖你的实际业务场景。

内容的提问来源于stack exchange,提问作者Kyoshiro Kokujou Obscuritas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:22:04