Общие методы, реализованные разными классами - PullRequest
0 голосов
/ 27 августа 2018

Мы работаем над приложением, у которого есть методы поиска в базе данных, теперь большинство или некоторые классы в моем проекте будут использовать эти методы поиска.Я не хочу создавать интерфейс, потому что это заставит мои классы реализовать все методы в интерфейсе.В общем, я хочу, чтобы у класса были методы поиска, которые будут обычно использоваться большинством / некоторыми из моих методов.

Например, у меня есть эти поиски

class lookup
{
public bool getId();
public bool getName();
public bool getDescription();
}

У меня могут быть классыкоторый будет реализовывать только один или ни один из этих методов

Class A
{
public bool getId()
{
do some work
}
}

class B
{
public bool getName()
{
do some work
}
}

class C
{
implements none of the methods
}

И т. д.

как этого достичь?Я предполагаю, что абстрактный класс был бы прав

1 Ответ

0 голосов
/ 27 августа 2018

Один из вариантов, если вы не хотите иметь множество интерфейсов, это иметь реализацию по умолчанию для вашего абстрактного базового класса:

public abstract class LookupBase
{
    public virtual bool getId()
    {
        throw new NotImplementedException();
    }
    public virtual bool getName();
    {
        throw new NotImplementedException();
    }
    public virtual bool getDescription();
    {
        throw new NotImplementedException();
    }
}

И в ваших конкретных реализациях переопределяет только то, что вам нужно:

public class LookupA: LookupBase
{
    public override bool getId()
    {
        //do some work
    }
}

Если вы выбросите исключения, как в моем примере, во время выполнения будет очевидно, что что-то не реализовано.Однако это произойдет только во время выполнения, а не во время компиляции.Как отметил @Bagus Tesa, этот подход потребует много дисциплины и документации, чтобы знать, что происходит в каждом конкретном случае.Другой немного более безопасный с точки зрения исполнения и немного более опасный подход - иметь реализацию по умолчанию, которая ничего не будет делать / возвращать объект этих методов по умолчанию.Это не разрушит ваше приложение во время выполнения, но приведет к потенциальным логическим ошибкам.

...