The IHideObjectMembers
trick (a.k.a IFluentInterface
) peut être utilisé par ex. dans des implémentations d'interface fluides pour masquer System.Object
membres d'IntelliSense. (Si vous ne connaissez pas cette astuce, vous pouvez lire sur le sujet via le lien ci-dessus, je ne fais que répéter la déclaration habituelle de l'interface ici :)L'astuce VS IntelliSense - IFluentInterface/IHideObjectMembers ne fonctionne pas. Pourquoi?
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();
}
Je suis maintenant censé pouvoir se cacher System.Object
membres sur un autre type comme suit:
public class SomeClass : IHideObjectMembers { ... }
ou:
public interface ISomeInterface : IHideObjectMembers { ... }
J'ai essayé dans les deux VS 2008 express et VS 2008 standard. Cependant, aucun membre n'est caché à IntelliSense. J'ai utilisé le EditorBrowsableAttribute
dans différents projets et cela a toujours bien fonctionné; Cependant, cela ne fonctionne pas dans ce scénario particulier.
http://i48.tinypic.com/vhb4fq.jpg
Si les choses avaient travaillé comme prévu, j'aurait seulement vu la méthode SomeMethodTwo
.
Ai-je raté quelque chose?
P.S .: Vous pouvez déduire mon code exemple des déclarations et la capture d'écran. J'ai une classe SomeClass
avec une seule méthode factice appelée SomeMethodTwo
. Très simple. J'ai pas ré-implémenté les quatre méthodes System.Object
dans cette classe, comme cela ne devrait pas être nécessaire.
Dans les versions récentes de Visual Studio (2015, 2017) , 'IHideObjectMembers' /' IFluentInterface' est rendu inutilisable par un bug de Roslyn; voir https://github.com/dotnet/roslyn/issues/4434. – stakx