Компилятор C# жалуется, что абстрактный класс не реализует интерфейс?

LINQ определенно имеет свое место в специализированных базах данных и в предприятиях малого бизнеса.

, Но на крупном предприятии, где центральные базы данных служат концентратором общих данных для многих приложений, нам нужна абстракция. Мы должны централизованно управлять безопасностью и выставочными историями доступа. Нам необходимо сделать анализ влияния: если я делаю небольшое изменение модели данных для обслуживания новой бизнес-потребности, какие запросы должны быть изменены и какие приложения должны быть повторно протестированы? Представления и Хранимые процедуры дают мне это. Если LINQ может сделать все это и сделать наших программистов более продуктивными, я буду приветствовать его - у кого-либо есть опыт с помощью него в этом виде среды?

30
задан Anteru 9 November 2009 в 12:45
поделиться

3 ответа

Вы должны добавить абстрактную заглушку метода:

public abstract ITask CreateTask(TaskId id);

Наследники могут затем переопределить его для реализации интерфейса.

43
ответ дан 28 November 2019 в 00:01
поделиться

Когда объект реализует интерфейс, он должен подчиняться всем ограничениям, применяемым интерфейсом. Это означает, что вы должны реализовать все свойства и методы, объявленные в интерфейсе.

В вашем случае вам не хватает реализации CreateTask. Также следует отметить, что C # использует свойства в отличие, например, от Java, в которой используются методы получения / установки. По этой причине вам не нужен метод SetName.

Ваш код должен выглядеть примерно так:

public abstract class TaskDefinitionBase : ITaskDefinition
{
    private string name_ = null;

    public abstract ITask CreateTask(TaskId id);

    public string Name
    {
        get
        {
            return name_;
        }
        set
        {
            name_ = value
        }
    }

    public bool HasName
    {
        get
        {
            return name_ != null;
        }
    }
}
4
ответ дан 28 November 2019 в 00:01
поделиться

TaskDefinitionBase должна включать CreateTask - если вы не хотите его реализовывать, просто отметьте метод как абстрактный, чтобы заставить любые реализующие классы реализовать его.

1
ответ дан 28 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: