Существуют ли ситуации, когда new следует использовать вместо переопределения при управлении базовым классом? - PullRequest
5 голосов
/ 14 марта 2012

Примеры, с которыми мне приходилось сталкиваться, когда «новый» имеет смысл, включают ситуации обслуживания, когда подкласс наследуется от базового класса в библиотеке, а новая версия библиотеки добавляет метод с тем же именем, что и один.это было реализовано в подклассе.(См .: Хрупкие базовые классы )

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

public class FruitBasket {
    public int Weight { get; set;}
    public List<Fruit> Fruits {get; set;}
}

public class AppleBasket : FruitBasket {
    public new List<Apple> Fruits  {get; set;}
}

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

Мне известна одна ситуация: вам нужно использовать новое в .Net WinForms, если вы привязываете данные к интерфейсу, который наследуется от другого интерфейса, и хотите привязать элементы к базовому интерфейсу.

Например, если у вас есть

public interface IOne
{
   int ID {get;set;}
   string Code {get;set;}
}

public interface ITwo : IOne
{
   DateTime CreatedDate {get;set;}
}

и вы привязываете элемент управления к объекту ITwo, вы не сможете увидеть свойства ID или кода, если не добавите их в интерфейс ITwo.Конечно, вам не нужно использовать новое, но это рекомендуется.

Кроме этого, я когда-либо использовал его только в режиме обслуживания, т. Е. После того, как приложение было отправлено, а новые требования требуют такого изменения.

HTH, Дин.

0 голосов
/ 14 марта 2012

Я думаю, что ссылка MSDN показывает, где ключевое слово new может быть оправдано: ( Ссылка MSDN: новый модификатор ).Например, случаи использования вложенных классов.

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