我不明白为什么这个构造函数不起作用

Lun*_*rap 1 c# generics inheritance constructor abstract-class

我有一个简单FiniteStateMachine,并为FSM的状态是从继承的类FSMState抽象类,至极的力量实现的某些方法和字段,该ownerClass字段是一个泛型类型,所以每个国家持有到拥有该实例的类的引用密克罗尼西亚联邦

public abstract class FSMState<T>
{
    /// <summary>
    /// Reference to the owner class of this State.
    /// </summary>
    protected abstract T ownerClass { get; set; }
    /// <summary>
    /// The ID name of this State.
    /// </summary>
    public abstract string Name { get; set; }

    //Constructor
    public FSMState(T owner, string name)
    {
        ownerClass = owner;
        Name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以州级会看起来像这样

public class MovingState : FSMState<AI>
{
    protected override AI ownerClass { get; set; }

    public override string Name { get; set; }

    //Contructor.
    public MovingState(AI owner, string name)
    {
        ownerClass = owner;
        Name = name;
    }

}
Run Code Online (Sandbox Code Playgroud)

但构造函数不起作用,我得到这2个错误

错误CS7036没有给出对应于FSMState.FSMState所需的形式参数所有者的参数(AI,字符串)

错误:类型FSMState不包含带0参数的构造函数

我不知道如果这样做,这是可能的,我想继承的形式类FSMState实现一个构造函数设置字段NameownerClass,但ownerClass字段必须是通用

我想做一些不可能的事情?

Lee*_*Lee 9

您需要在以下位置调用基类构造函数MovingState:

public MovingState(AI owner, string name)
    : base(owner, name)
{
}
Run Code Online (Sandbox Code Playgroud)

  • @YotamSalmon - 你必须调用基类构造函数,它带有两个参数.如果你没有明确地这样做,那么将调用无参数的,但是在`FSMState <T>`上不存在,因此错误.他们可以向基类添加无参数构造函数,但更可能的是他们只需要使用给定的参数调用现有的构造函数. (3认同)