IHideObjectMembers
прием (иначе IFluentInterface
) может использоваться, например, в быстрых интерфейсных реализациях для сокрытия System.Object
участники от IntelliSense. (Если Вы не знаете этот прием, можно читать на нем по вышеупомянутой ссылке; я просто повторяю обычное объявление интерфейса здесь:)
using System;
using System.ComponentModel;
[EditorBrowsable(EditorBrowsableState.Never)]
public interface IHideObjectMembers
{
[EditorBrowsable(EditorBrowsableState.Never)] bool Equals(object obj);
[EditorBrowsable(EditorBrowsableState.Never)] int GetHashCode();
[EditorBrowsable(EditorBrowsableState.Never)] Type GetType();
[EditorBrowsable(EditorBrowsableState.Never)] string ToString();
}
Я, как теперь предполагается, могу скрыться System.Object
участники на другом типе следующим образом:
public class SomeClass : IHideObjectMembers { ... }
или:
public interface ISomeInterface : IHideObjectMembers { ... }
Я попробовал это и в Экспрессе VS 2008 и в Стандарте VS 2008 года. Однако никакие участники не скрыты от IntelliSense вообще. Я использовал EditorBrowsableAttribute
в различных проектах и это всегда работало хорошо; однако, это не работает в этом конкретном сценарии.
Если бы вещи работали как ожидалось, то я только видел бы SomeMethodTwo
метод.
Я пропускаю что-то?
P.S.: можно вывести мой пример кода из объявлений и снимка экрана. У меня есть класс SomeClass
с единственным фиктивным названным методом SomeMethodTwo
. Очень простой. Я не повторно реализовал четыре System.Object
методы в этом классе, поскольку это не должно быть необходимо.
Перед тем, как было опубликовано рабочее решение (см. Выше), я немного исследовал и экспериментировал и обнаружил следующее:
IntelliSense нужно указать, чтобы он игнорировал свойства, отмеченные EditorBrowsableState
равно Advanced
или Never
. Это достигается в Visual Studio через пункт меню Инструменты → Параметры ... → Текстовый редактор → C # → IntelliSense → Скрыть расширенных участников .
Уловка IHideObjectMembers
работает только из «других» сборок и только тогда, когда проект, использующий IHideObjectMembers
, не загружен в то же решение.
Скрытие нестатических членов объекта
иногда не работает, если выполняется через интерфейс IHideObjectMembers
, но работает, когда методы явно переопределяются непосредственно в классе ... что, к сожалению, делает показанный метод сокрытия менее полезным.
Источники этих подсказок:
Статья в блоге Как сделать информационное окно Intellisense коротким и аккуратным на exdream.com .
Справочная страница MSDN для System.ComponentModel.EditorBrowsableAttribute
.