2015-02-16 2 views
0

Я не уверен, что это лучше подходит программистам на SE.Overriding and New

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

EG

public override int Calls(int i) 
    { 
     //Do some things 
     return base.Calls(i); 
    } 

выше делает логику, а затем вызывает базовый класс.

Если я новый

public new int Calls(int i) 

Тогда я могу реализовать свою собственную логику, как будто никогда не существовал базовый класс (как это никогда не называли).

Что меня смущает, я могу просто удалить вызов базового класса из моего метода переопределения, а я думаю Я получаю те же результаты, что и новый. Значение

public override int Calls(int i) 
{ 
    //Do some things 
    // return base.Calls(i); COMMENTED OUT, no base class call 
} 

выше фрагмент кода, безусловно, является такой же, как public new int Calls(int i)

Мой вопрос, я прав - это это, в конечном счете 2 способа сделать то же самое, так что она становится лучше с точки зрения ясности для разработчика (с использованием переопределения или нового) или существуют ли какие-либо другие различия между двумя (любыми полученными).

+2

Вы пробовали использовать метод 'Calls' через переменную, объявленную как * базовый класс *? –

+0

Это не одно и то же. Попробуйте googling «override vs new C#». – samjudson

ответ

1

Существует массивный разница между новыми и переопределениями.

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

с новым однако метод производного класса называется только, если вы удерживаете объект производного класса. «новый» - это то, над чем вы должны быть очень осторожны, и я просто не использую его.

+0

Нет причин не использовать 'new'. Если у вашего дочернего класса было то же имя метода, что и его родительский (и они не связаны), вам действительно рекомендуется, чтобы компилятор добавил ключевое слово 'new', поэтому тот факт, что они не связаны, будет явным. Я бы сказал, что лучше попытаться избежать столкновений имен, не избегая «новых». – haim770