Должен быть открытый конструктор без параметров, не так ли? - PullRequest
14 голосов
/ 14 апреля 2011
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' должен иметь открытый конструктор без параметров, чтобы использовать его в качестве параметра 'K' в универсальном классе 'EventSystemBase' '*

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

У меня вопрос ..AutomatizableEvent DO ИМЕЕТ открытый конструктор без параметров ??

Ответы [ 2 ]

31 голосов
/ 14 апреля 2011

Описание ошибки неверное, но ошибка правильная.

AutomatizableEvent не может использоваться в качестве универсального параметра K из-за ограничения where K : new().Абстрактный класс не удовлетворяет этому ограничению.

Конструктор абстрактного класса всегда эффективно защищен, поскольку абстрактный может быть создан только как базовый подобъект производного класса, конструктор также может быть только когда-либовызываться конструктором производного класса и только в цепочке конструктора.В частности, он не может использоваться EventSystemBase<T, K> в контексте new K().

6 голосов
/ 14 апреля 2011

вы не можете создать экземпляр абстрактного класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...