Есть ли причина скрывать унаследованные элементы в интерфейсе?

Скобки необходимы, если вы используете ключевые слова или специальные символы в именах столбцов или идентификаторах. Вы можете назвать столбец [First Name] (с пробелом), но тогда вам нужно будет использовать скобки каждый раз, когда вы ссылаетесь на этот столбец.

Новые инструменты добавляют их повсюду на всякий случай или для последовательность.

13
задан kbrimington 25 August 2010 в 22:10
поделиться

4 ответа

Есть ли практическая причина скрывать элементы в интерфейсах, которые реализуют другие интерфейсы?

Конечно. Тот факт, что сам BCL использует этот шаблон, свидетельствует о его практичности. Например:

interface IEnumerable 
{ 
    IEnumerator GetEnumerator();
}
interface IEnumerable<T> : IEnumerable
{
    new IEnumerator<T> GetEnumerator();
}

Разработчики IEnumerable хотели обеспечить обратную совместимость с IEnumerable, но также хотели гарантировать, что каждое использование GetEnumerator на универсальный интерфейс, называемый универсальной версией. Сокрытие является подходящим механизмом в этом случае.

Дополнительную информацию о тонкостях сокрытия методов см. по адресу:

http://blogs.msdn.com/b/ericlippert/archive/2008/05/21/method-hiding-apologia.aspx

. ]
23
ответ дан 1 December 2019 в 19:48
поделиться

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

public interface IBase
{
   int MyProperty { get; }
}

public interface IDerive : IBase
{
    // you need to specify the getter here too
    new int MyProperty { get; set; }
}
7
ответ дан 1 December 2019 в 19:48
поделиться

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

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

См. также: Бывает ли ситуация, когда производный класс должен скрывать…?

1
ответ дан 1 December 2019 в 19:48
поделиться

Я полагаю, что если вы собираетесь явно реализовать IChildInterface, может быть случай, когда вы захотите скрыть PropertyA (возможно?)

0
ответ дан 1 December 2019 в 19:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: