Могу ли я переопределить абстрактный метод, написанный в родительском классе, с другим именем в дочернем классе? - PullRequest
0 голосов
/ 17 мая 2010
abstract class SettingSaver
    {


        public abstract void add(string Name, string Value);
        public abstract void remove(string SettingName);


    }


class XMLSettings : SettingSaver
    {

        public override void add(string Name, string Value)
        {
            throw new NotImplementedException();
        }

        public override void remove(string SettingName)
        {
            throw new NotImplementedException();
        }




    }

В любом случае, можно ли изменить имя функции добавления в классе XMLSettings на addSetting, но убедиться, что она переопределяет функцию добавления в SettingSaver? Я знаю, что это должно быть определенно переопределено в производных классах, но просто хочу знать, могу ли я использовать другое имя :) Заранее спасибо: D

Ответы [ 4 ]

9 голосов
/ 17 мая 2010

Нет, вы не можете изменить имя при переопределении метода в C #.

Конечно, вы можете переопределить метод и реализовать его, просто вызвав другой метод.

(В примечании к соглашению об именах методы, как правило, PascalCased, начинающиеся с заглавной буквы. Параметры, как правило, camelCased, начинающиеся со строчной буквы.)

3 голосов
/ 17 мая 2010

Нет - это несколько нарушило бы Полиморфизм (все, что может сделать родитель, должны делать дети).

Вы можете создать новый метод и использовать метаданные в старом методе, чтобы заставить любого, кто разрабатывает класс, использовать новый класс.

3 голосов
/ 17 мая 2010

Нет, ты не можешь.

Вы можете добавить другой метод, который содержит те же функции, но вы не можете скрыть или переименовать унаследованный метод.

Для примера этого у класса Stream в платформе есть метод с именем Close () . Это точно так же, как вызов Dispose (), но с именем, которое больше соответствует концепции «открытия» Steam, чтобы начать его использовать. Они не удалили метод Dispose (), только предоставили клиенту другой (лучше названный) способ доступа к той же функциональности.

1 голос
/ 17 мая 2010

Имя метода и аргументы - это то, что идентифицирует метод. Если вы измените имя метода, то вы определяете другой метод. Поскольку переопределение связано с определением того же метода в подклассе, вы должны использовать то же имя метода.

...