The IHideObjectMembers
trick (a.k.a IFluentInterface
) può essere utilizzato per es. in fluenti implementazioni dell'interfaccia per nascondere i membri System.Object
da IntelliSense. (Se non si conosce questo trucco, si può leggere su di esso attraverso il link qui sopra, sto solo ripetendo solita dichiarazione dell'interfaccia qui :)VS IntelliSense - IFluentInterface/IHideObjectMembers non funziona. Perché?
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();
}
Ora sto dovrei essere in grado di nascondere System.Object
membri su un altro tipo come segue:
public class SomeClass : IHideObjectMembers { ... }
o:
public interface ISomeInterface : IHideObjectMembers { ... }
ho provato questo sia VS 2008 Express e VS 2008 standard. Tuttavia, nessun membro è nascosto da IntelliSense. Ho usato il EditorBrowsableAttribute
in diversi progetti e ha sempre funzionato bene; tuttavia, non funziona in questo particolare scenario.
http://i48.tinypic.com/vhb4fq.jpg
Se le cose fossero andate come previsto, mi avrebbe solo visto il metodo SomeMethodTwo
.
Mi manca qualcosa?
P.S .: È possibile dedurre il mio codice di esempio dalle dichiarazioni e lo screenshot. Ho una classe SomeClass
con un singolo metodo fittizio chiamato SomeMethodTwo
. Molto semplice. Ho non reimplementato i quattro metodi System.Object
in questa classe, in quanto ciò non dovrebbe essere necessario.
Negli ultimi versioni di Visual Studio (2015, 2017) , 'IHideObjectMembers' /' IFluentInterface' è reso inutile da un bug di Roslyn; vedere https://github.com/dotnet/roslyn/issues/4434. – stakx