C#类没有实现继承的抽象成员

时间:2009-12-16 19:08:19

标签: c#

如果我问一些愚蠢的事情,我很抱歉,但我完全是C#和ASP.NET的新手。 我的代码中有错误,我不明白。 我正在开发Visual Studio 2008。

在这行代码中:

public class SQLFAQProvider : DBFAQProvider

我收到此错误:

  

Moby.Commerce.DataAccess.FAQ.SQLFAQProvider未实现继承的抽象成员Moby.Commerce.DataAccess.FAQDBFAQProvider.DeleteFAQbyID(int)

当我转到DBFAQProvider时,错误出现在以下代码行中:

public abstract DBFAQ DeleteFAQbyID(int fAQID);

我应该更改什么来纠正它?

8 个答案:

答案 0 :(得分:21)

首先想到的是在继承的类ala中实现抽象成员:

public class SQLFAQProvider : DBFAQProvider
{
    public override DBFAQ DeleteFAQbyID(int fAQID)
    {
        //TODO: Real Code
        return null;
    }
}

答案 1 :(得分:21)

在派生类中实现DeleteFAQbyID方法:

public override DBFAQ DeleteFAQbyID(int fAQID)
{
    // Put your code here
}

抽象方法的要点是(在抽象基类中),“我想确保这个方法在从我派生的每个具体类中都可用” - 由你来提供实现。这有点像界面中的方法。

答案 2 :(得分:10)

您的子类需要显式实现该特定方法。

如果你不知道怎么做,那至少要做:

public override DBFAQ DeleteFAQbyID(int fAQID)
{
    throw new NotImplementedException("This isn't done yet");
}

答案 3 :(得分:5)

当您从C#中的类继承时,除非您的类本身标记为abstract,否则您需要实现标记为abstract的所有方法。抽象类是无法在运行时直接实例化的类,因为它们没有完全实现基类所必须存在的所有必需方法。

抽象方法是一种允许类指示特定方法必须“最终”存在的机制 - 而不必在此时提供实现。当你不能或不想指定特定实现应该做什么时,你通常使用抽象类,但是你需要预先定义一个你最终会依赖的方法。

要解决您的问题,请将您的类标记为抽象(期望另一级别的继承将填充缺失的部分)或在您的类中实现DeleteFAQbyId():

public DBFAQ DeleteFAQbyID(int fAQID)
{
    // write appropriate implementation here or:
    throw new NotImplementedException();
    // or possibly NotSupportedException() if the operation should can't ever be supported.
}

答案 4 :(得分:2)

当一个类继承自抽象类时,它必须实现所述类定义的所有抽象方法。这是类接口,抽象方法可以被认为是纯虚函数,即必须由下层类实现但在基类中实现没有意义的函数。

答案 5 :(得分:2)

由于您的SQLFAQProvider课程不是abstract,因此必须实施其继承的每个abstract课程。

要解决此问题,请在DeleteFAQbyID中实施SQLFAQProvider方法,如下所示:

public override DBFAQ DeleteFAQbyID(int fAQID) {
    //Do something
}

或者,您可以通过将其声明更改为SQLFAQProvider来制作abstract课程public abstract class SQLFAQProvider

答案 6 :(得分:1)

您的子类(SQLFAQProvider)必须为DeleteFAQbyID方法提供实现代码,因为父类(DBFAQProvider)没有。

答案 7 :(得分:-2)

在抽象类中使用像IsValid这样的实体属性。使它返回要在派生类中重写的抽象方法。

在抽象基类中:

public bool IsValid
{
    get
    {
        return  DeleteFAQbyID();
    }
}

public abstract bool DeleteFAQbyID();

在派生类中,它将覆盖抽象类的方法。