以下、メモ書きです。
特定のクラス全体もしくはプロパティ・メソッド単位でインテリセンス上で非表示にするには、以下の属性を
使用します。
System.ComponentModel.EditorBrowsableAttribute
この属性を指定する際には、EditorBrowsableStateの列挙型を指定して表示モードを
指定しています。EditorBrowsableState.Neverを指定すると完全に非表示になります。
ただし、この属性をVisual C#で利用する場合は注意が必要になります。
MSDNのEditorBrowsableの説明の箇所に以下の文言があります。
Visual C# では、EditorBrowsableAttribute は同じアセンブリのクラスのメンバは非表示になりません。
これ、間違いやすいので注意が必要です。
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2803030&SiteID=1 にもあるとおり
非表示になっているかどうかを確認するには、参照設定にてプロジェクトで追加するのではなくて
参照タブから、実際のアセンブリ(DLL、EXE)を直接指定する必要があります。
(プロジェクトで指定した場合は、EditorBrowsableAttributeを指定していても非表示になりません。)
(VBとかの場合は非表示になるみたいですね。)
以下、サンプルです。
クラスライブラリ側:[ClassLibrary1.dll]
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; using System.ComponentModel; namespace ClassLibrary1 { public class Demo { public const string A_CONST_VALUE = "hoge"; [EditorBrowsable(EditorBrowsableState.Never)] public string PropertyValue { get; set; } [EditorBrowsable(EditorBrowsableState.Never)] public void MethodA() { // // nop. // } } [EditorBrowsable(EditorBrowsableState.Never)] public class Demo2 { public const string A_CONST_VALUE = "hoge"; public string PropertyValue { get; set; } public void MethodA() { // // nop. // } } }
利用する側:[ConsoleApplication1.exe]
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; using System.ComponentModel; namespace ConsoleApplication1 { using ClassLibrary1; class Program { static void Main(string[] args) { Demo d = new Demo(); Demo2 d2 = new Demo2(); // // 以下のどちらもインテリセンスには表示されない。 // //d.MethodA(); //d2.MethodA(); // // 以下はどちらもインテリセンスに表示される。 // Console.WriteLine(Demo.A_CONST_VALUE); Console.WriteLine(Demo2.A_CONST_VALUE); } } }