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

标签 c# generics inheritance constructor abstract-class

我有一个简单的FiniteStateMachine,并且FSM的状态是从FSMState抽象类继承的类,它们强制实现某些方法和字段,ownerClass字段是泛型,因此每个状态都持有对拥有FSM实例的类

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;
    }
}


所以一个状态类看起来像这样

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;
    }

}


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


  错误CS7036,没有给出与FSMState.FSMState(AI,string)的必需形式参数所有者相对应的参数
  
  错误:FSMState类型不包含带有0个参数的构造函数


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

我正在尝试做一些不可能的事情?

最佳答案

您需要在MovingState中调用基类构造函数:

public MovingState(AI owner, string name)
    : base(owner, name)
{
}

关于c# - 我不明白为什么这个构造函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36779652/

相关文章:

c# - 将数组从一个按钮传递到另一个按钮

c# - 如何在Linux机器上通过nodejs应用程序运行C#代码?

c# - 在应用程序中使用WCF类库

java - 类的通用类型

c++ - 如何在 Derived 的 Ctor 中使用模板基类中的 typedef?

C# : Can I iterate Dictionary to get each content?

c# - 将项目添加到通用列表时出现问题

java - 如何克服 LinkedHashMap 是原始类型的问题。 Eclipse 中对泛型类型 LinkedHashMap<K,V> 的引用应该参数化问题

c# - 访问第二个父级的成员(继承)

java - 是否可以创建一个从另一个子类扩展的子类?