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

C#创建类构造函数时报CS7036错误的原因及解决方法

C# CS7036 构造函数错误解决

错误触发原因

CS7036 错误本质为编译器无法找到匹配参数列表的构造函数重载,你遇到的报错是由C#继承的构造函数调用规则导致:

  • 子类构造函数执行前会默认隐式调用父类的无参数构造函数
  • 你的父类 CarCommandExecutorBase 仅显式定义了接收 ICarCommand 类型参数的构造函数,此时编译器不会为父类自动生成默认无参构造
  • 子类 CarStringCommandExecutor 的构造函数没有显式指定调用的父类构造重载,编译器尝试调用父类无参构造失败,触发CS7036错误。

修复方案

优先选择显式调用父类带参构造的方案,匹配你现有代码的设计逻辑:

方案1:Car类已实现ICarCommand接口(最常见场景)

直接将子类构造的Car入参传递给父类构造即可:

public class CarStringCommandExecutor : CarCommandExecutorBase, IStringCommand
{
    // 加base(car)显式调用父类带参构造
    public CarStringCommandExecutor(Car car) : base(car)
    {
        // 你的构造逻辑
    }
    public void ExecuteCommand(string commandObject)
    {

    }
}

方案2:Car类未实现ICarCommand接口

先基于Car实例生成ICarCommand实现类的实例,再传给父类构造:

public CarStringCommandExecutor(Car car) : base(new CarCommandImpl(car))
{
    // 这里的CarCommandImpl是你自己实现了ICarCommand接口的类
}

备选方案:父类补充无参构造(不推荐)

如果你确实需要父类支持无参构造,要注意父类的readonly字段CarCommand只能在构造函数中赋值,需要自行处理初始化逻辑:

public class CarCommandExecutorBase
{
    protected readonly ICarCommand CarCommand;
    public CarCommandExecutorBase(ICarCommand carCommand)
    {
        CarCommand = carCommand;
    }
    // 新增无参构造,自行完成字段初始化
    public CarCommandExecutorBase()
    {
        CarCommand = // 你的默认ICarCommand实现,不要留空
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:54:04