Подтвердить что ты не робот

Класс С# не реализует унаследованный абстрактный элемент

Прошу прощения, если я спрашиваю что-то глупое, но я полностью новичок в С# и 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);

Что я должен изменить, чтобы исправить его?

4b9b3361

Ответ 1

Первой мыслью было бы реализовать абстрактный элемент в унаследованном классе ala:

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

Ответ 2

Внедрите метод DeleteFAQbyID в производном классе:

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

Точка абстрактного метода состоит в том, чтобы сказать (в абстрактном базовом классе): "Я хочу убедиться, что этот метод доступен в каждом конкретном классе, происходящем от меня" - это зависит от вас, чтобы обеспечить реализацию. Это немного похоже на метод в интерфейсе.

Ответ 3

Ваш подкласс должен явно реализовать этот конкретный метод.

Если вы не знаете, как это сделать, тогда, по крайней мере, выполните:

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

Ответ 4

Когда вы наследуете класс в С#, вам необходимо реализовать все методы, помеченные как 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.
}

Ответ 5

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

Ответ 6

Поскольку ваш класс SQLFAQProvider не является abstract, он должен реализовать каждый метод abstract, который он наследует.

Чтобы исправить это, примените метод DeleteFAQbyID в SQLFAQProvider, например:

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

В качестве альтернативы вы можете сделать свой SQLFAQProvider класс abstract, изменив его объявление на public abstract class SQLFAQProvider.

Ответ 7

Ваш подкласс (SQLFAQProvider) должен предоставить код реализации для метода DeleteFAQbyID, потому что родительский класс (DBFAQProvider) этого не сделал.

Ответ 8

В абстрактном классе используйте свойство entity, например IsValid. Заставьте его вернуть абстрактный метод, который вы хотите переопределить в производном классе.

В абстрактном базовом классе:

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

public abstract bool DeleteFAQbyID();

В производном классе теперь он переопределит метод абстрактного класса.