Трюк 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 Express, и в VS 2008 Standard.Тем не менее, никто не скрывается от IntelliSense вообще.Я использовал EditorBrowsableAttribute
в разных проектах, и он всегда работал хорошо;однако в данном конкретном сценарии это не работает.
http://i48.tinypic.com/vhb4fq.jpg
Если бы все работало так, как ожидалось, я бы увидел только метод SomeMethodTwo
.
Я что-то упустил?
PS: Вы можете вывести мой пример кода из объявлений и снимка экрана.У меня есть класс SomeClass
с единственным фиктивным методом с именем SomeMethodTwo
.Очень просто.Я не повторно реализовал четыре System.Object
метода в этом классе, так как в этом не должно быть необходимости.