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 一个公共无参数构造函数??
答案 0 :(得分:31)
错误描述错误,但错误是正确的。
由于约束AutomatizableEvent
, K
不能用作通用参数where K : new()
。抽象类不满足该约束。
抽象类的构造函数始终受到有效保护,因为抽象只能作为派生类的基础子对象创建,构造函数同样只能由派生类的构造函数调用,并且只能在构造函数链接。具体而言,EventSystemBase<T, K>
中的new K()
无法使用它。
答案 1 :(得分:6)
您无法实例化抽象类