web-dev-qa-db-ja.com

インテリセンスからパブリックメソッドを非表示にする方法

IntelliSenseメンバーリストからパブリックメソッドを非表示にします。メソッドに適用されると、オブジェクトの構築時にメソッドが呼び出される属性を作成しました。部分クラスをより適切にサポートするためにこれを行いました。問題は、一部の環境(Silverlightなど)では、リフレクションが子クラスのプライベートメンバーにさえプライベートメンバーにアクセスできないことです。すべての作業は基本クラスで行われるため、これは問題です。これらのメソッドを公開する必要がありますが、Obsolete属性が機能する方法と同様に、それらをインテリセンスから隠したいです。率直に言って、私はオブジェクトのカプセル化についてアナルだからです。私はさまざまなことを試しましたが、実際には何も機能していません。このメソッドは、引き続きメンバーのドロップダウンに表示されます。

クライアントから呼び出されたくないときに、インテリセンスにパブリックメソッドが表示されないようにするにはどうすればよいですか? areal質問、ペリシテ人!これは、公開する必要があるMEFプロパティにも適用できますが、クライアントから非表示にする場合もあります。

更新:この質問を投稿してから、開発者として成熟しました。なぜインターフェイスを隠すことをそんなに気にしたのかは私にはわかりません。

49
Jordan

部分メソッドについての私のコメントを展開します。このようなものを試してください

Foo.part1.cs

partial class Foo
{
    public Foo()
    {
        Initialize();
    }

    partial void Initialize();
}

Foo.part2.cs

partial class Foo
{
    partial void Initialize()
    {
         InitializePart1();
         InitializePart2();
         InitializePart3();
    }

    private void InitializePart1()
    {
        //logic goes here
    }

    private void InitializePart2()
    {
        //logic goes here
    }

    private void InitializePart3()
    {
        //logic goes here
    }
}
0
cadrell0

EditorBrowsable属性をそのように使用すると、メソッドがインテリセンスに表示されなくなります。

[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public void MyMethod()
{
}
110
Adi Lester

あなたが探している EditorBrowsableAttribute

次のサンプルは、EditorBrowsableAttribute属性に適切な値を設定して、IntelliSenseからクラスのプロパティを非表示にする方法を示しています。独自のアセンブリでClass1をビルドします。

Visual Studioで、新しいWindowsアプリケーションソリューションを作成し、Class1を含むアセンブリへの参照を追加します。 Form1コンストラクターで、Class1のインスタンスを宣言し、インスタンスの名前を入力し、ピリオドキーを押してClass1メンバーのIntelliSenseドロップダウンリストをアクティブにします。 Ageプロパティは、ドロップダウンリストに表示されません。

using System;
using System.ComponentModel;

namespace EditorBrowsableDemo
{
    public class Class1
    {
        public Class1()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        int ageval;

        [EditorBrowsable(EditorBrowsableState.Never)]
        public int Age
        {
            get { return ageval; }
            set
            {
                if (!ageval.Equals(value))
                {
                    ageval = value;
                }
            }
        }
    }
}
15
SimSimY