Абстрактный класс и методы - PullRequest
1 голос
/ 09 ноября 2011

у меня есть Абстрактный класс

Public class Abstract baseClass
{
     public abstract string GetString();
     public abstract string GetString1();
}

public class DerivedClass : baseClass
{
      public override string GetString()
        {
            return "test data";
        }

    public override string GetString1()
    {
        throw new NotImplementedException();
    }
}

В приведенной выше строке кода я должен реализовать оба абстрактных метода в производном классе.Но по какой-то причине я не хочу реализовывать все методы, только один из них, например, GetString ().Как это можно сделать?

Спасибо

Ответы [ 3 ]

1 голос
/ 09 ноября 2011

Как правило, если вы не реализуете все абстрактные методы, тогда ваш новый класс также является абстрактным классом. Чтобы получить конкретный класс, вам нужно реализовать все методы. Если вы хотите / должны реализовывать только подмножество методов, рассмотрите возможность использования нескольких интерфейсов (один интерфейс с GetString, а другой с GetString1), а не абстрактный класс. Затем вы можете просто реализовать интерфейсы с методами, которые вы хотите использовать в классе.

1 голос
/ 09 ноября 2011

Если DerivedClass собирается предложить общие функциональные возможности другим классам, вы можете пометить его как абстрактный, реализовать один из методов здесь, и тогда наследникам потребуется только реализовать оставшийся метод.

Если вы не собираетесь поддерживать другой метод в данной реализации, вам все равно придется выставить метод в своем классе, но, как и в этом случае, вы обычно выбрасываете NotSupportedException. Для void методов вы можете просто вернуть (ничего не делать).

Наконец, если вы хотите отделить вещи, которые имеют оба метода и те, которые имеют только один, вы можете использовать интерфейсы.

public interface IBase
{
    string GetString();
}

public interface IBasePlus : IBase
{
    string GetStringPlus();
}

У вас может быть один класс, реализующий IBasePlus, но вы можете предоставить его методам, которые принимают параметр типа IBase, и в этом случае вы не увидите дополнительный метод.

0 голосов
/ 09 ноября 2011

Снимите ключевое слово abstract с другого метода и предоставьте реализацию по умолчанию в базовом классе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...