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 { ... }
or:
public interface ISomeInterface : IHideObjectMembers { ... }
Я пробовал это как в VS 2008 Express, так и в VS 2008 Standard. Однако никакие члены не скрыты от IntelliSense. Я использовал EditorBrowsableAttribute
в разных проектах, и он всегда работал хорошо; однако в данном конкретном сценарии это не работает.
Если бы все работало так, как ожидалось, я бы увидел только метод SomeMethodTwo
.
Я что-то упускаю?
P.S .: Вы можете вывести мой пример кода из объявлений и снимка экрана. У меня есть класс SomeClass
с единственным фиктивным методом под названием SomeMethodTwo
. Очень простой. Я не повторно реализовал четыре System.Object
метода в этом классе, поскольку в этом нет необходимости.
IHideObjectMembers
/IFluentInterface
становится бесполезным из-за ошибки Roslyn; см. github.com/dotnet/roslyn/issues/4434. - person stakx - no longer contributing   schedule 27.12.2017