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().