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

时间:2011-04-14 00:27:16

标签: 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; }
    [...]
}

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

public abstract class EventSystemBase<T, K> : AutomatizableEvent
    where T : Event
    where K : AutomatizableEvent, new()

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

2 个答案:

答案 0 :(得分:31)

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

由于约束AutomatizableEvent

K不能用作通用参数where K : new()。抽象类不满足该约束。

抽象类的构造函数始终受到有效保护,因为抽象只能作为派生类的基础子对象创建,构造函数同样只能由派生类的构造函数调用,并且只能在构造函数链接。具体而言,EventSystemBase<T, K>中的new K()无法使用它。

答案 1 :(得分:6)

您无法实例化抽象类