微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决必须有一个公共的无参数构造函数,不是吗?

|
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没有公共无参数构造函数吗?     

解决方法

错误描述是错误的,但是错误是正确的。 由于约束
where K : new()
,2ѭ不能用作通用参数
K
。抽象类不满足该约束。 始终有效地保护抽象类的构造函数,因为只能将抽象创建为派生类的基础子对象,因此构造函数同样只能由派生类的构造函数调用,并且只能在构造函数链接中调用。具体地说,
EventSystemBase<T,K>
在上下文
new K()
中不能使用它。     ,你不能实例化一个抽象类     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。