The IHideObjectMembers
trick (a.k.a IFluentInterface
) can be used e.g. in fluent interface implementations to hide System.Object
members from IntelliSense. (If you don't know this trick, you can read up on it via the above link; I'm just repeating the interface's usual declaration here:)
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();
}
I'm now supposed to be able to hide System.Object
members on another type as follows:
public class SomeClass : IHideObjectMembers { ... }
or:
public interface ISomeInterface : IHideObjectMembers { ... }
I tried this in both VS 2008 Express and VS 2008 Standard. However, no members are hidden from IntelliSense at all. I have used the EditorBrowsableAttribute
in different projects and it always worked well; however, it doesn't work in this particular scenario.
If things had worked as expected, I would only have seen the SomeMethodTwo
method.
Am I missing something?
P.S.: You can infer my example code from the declarations and the screenshot. I have a class SomeClass
with a single dummy method called SomeMethodTwo
. Very simple. I have not re-implemented the four System.Object
methods in this class, as this should not be necessary.