必须有一个公共无参数构造函数,它不是吗?

bev*_*qua 15 c# generics interface

public interface IAutomatizableEvent
{
    Event AutomatizableEventItem { get; }
    bool CanBeAutomatic { get; }
    bool IsAutomaticallyRunning { get; }

    bool OnBeforeAutomaticCall();
    bool OnAutomaticCheck();
    void OnAutomaticStart();
    void OnAutomaticCancel();
}

public abstract class AutomatizableEvent : IAutomatizableEvent
{
    public AutomatizableEvent()
    {
    }

    #region Implementation of IAutomatizableEvent

    public abstract Event AutomatizableEventItem { get; }
    public abstract bool CanBeAutomatic { get; }
    public abstract bool IsAutomaticallyRunning { get; }
    public abstract bool OnBeforeAutomaticCall();
    public abstract bool OnAutomaticCheck();
    public abstract void OnAutomaticStart();
    public abstract void OnAutomaticCancel();

    #endregion
}



public static class EventSystem
{
    public static List<EventSystemBase<Event, AutomatizableEvent>> AutomatizableEvents { get; set; }
    [...]
}
Run Code Online (Sandbox Code Playgroud)

"类型'AutomatizableEvent'必须有一个公共无参数构造函数,以便在泛型类'EventSystemBase'中将它用作参数'K'"

public abstract class EventSystemBase<T, K> : AutomatizableEvent
    where T : Event
    where K : AutomatizableEvent, new()
Run Code Online (Sandbox Code Playgroud)

我的问题是...不AutomatizableEvent DO有一个公共无参数构造函数??

Ben*_*igt 32

错误描述错误,但错误是正确的.

AutomatizableEventK由于约束,不能用作通用参数where K : new().抽象类不满足该约束.

始终有效地保护抽象类的构造函数,因为抽象只能被创建为派生类的基础子对象,构造函数同样只能由派生类的构造函数调用,并且只能在构造函数链中调用.具体而言,它不能EventSystemBase<T, K>在上下文中使用new K().


cly*_*lyc 6

你不能实例化一个抽象类