如果我问一些愚蠢的事情,我很抱歉,但我完全是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);
我应该更改什么来纠正它?
答案 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();
在派生类中,它将覆盖抽象类的方法。