C#编译器抱怨抽象类没有实现接口?

Ant*_*eru 30 c# inheritance

我有一个很好的接口,我想在基类中实现它的一个成员,因此客户端可以从基类派生,并且可以编写更少的样板.但是,即使声明为abstract,编译器也会抱怨该类没有实现接口?!?应该怎么做?

有问题的代码:

public interface ITaskDefinition
{
    ITask CreateTask(TaskId id);
    string Name { get; }
    bool HasName { get; }
}

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

    public void SetName(string name)
    {
        name_ = name;
    }

    public string Name
    {
        get
        {
            return name_;
        }
    }

    public bool HasName
    {
        get
        {
            return name_ != null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

ITaskDefinition.cs(15,27): error CS0535: 'NetWork.Task.TaskDefinitionBase' does not implement interface member 'NetWork.Task.ITaskDefinition.CreateTask(NetWork.Task.TaskId)'
Run Code Online (Sandbox Code Playgroud)

R. *_*des 43

您必须添加方法的抽象存根:

public abstract ITask CreateTask(TaskId id);
Run Code Online (Sandbox Code Playgroud)

然后,继承者可以覆盖它以实现接口.

  • @ R.MartinhoFernandes我认为他说应该有一个错误/警告,说''抽象类型类型'没有实现'接口'; 创建一个抽象方法存根来解决这个错误 (5认同)