关于c#:如何隐藏intellisense中的公共方法

How to hide public methods from intellisense

我想从IntelliSense成员列表中隐藏公共方法。我已经创建了一个属性,当应用于一个方法时,它将导致在构造该方法的对象时调用该方法。我这样做是为了更好地支持部分类。问题是,在某些环境(如Silverlight)中,反射无法访问私有成员,甚至无法访问子类的成员。这是一个问题,因为所有的工作都是在一个基类中完成的。我必须将这些方法公开,但我希望将它们隐藏在intellisense中,类似于Obsolete属性的工作方式。坦率地说,因为我很喜欢对象封装。我试过不同的方法,但实际上没什么效果。该方法仍显示在"成员"下拉列表中。

当我不希望客户机调用公共方法时,如何防止它们在IntelliSense中出现?这真是个问题,非利士人!这也适用于必须公开的MEF属性,尽管有时您希望将它们隐藏在客户机之外。

更新:自从我发布这个问题以来,我已经成为一个成熟的开发人员。为什么我如此在意隐藏界面,这是我无法理解的。


使用这样的EditorBrowsable属性将导致一个方法无法在intellisense中显示:

1
2
3
4
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public void MyMethod()
{
}


你在找EditorBrowsableAttribute

The following sample demonstrates how to hide a property of a class
from IntelliSense by setting the appropriate value for the
EditorBrowsableAttribute attribute. Build Class1 in its own assembly.

In Visual Studio, create a new Windows Application solution, and add a
reference to the assembly which contains Class1. In the Form1
constructor, declare an instance of Class1, type the name of the
instance, and press the period key to activate the IntelliSense
drop-down list of Class1 members. The Age property does not appear in
the drop-down list.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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;
                }
            }
        }
    }
}


展开我对分部方法的评论。试试这个

Po.P1.1.CS

1
2
3
4
5
6
7
8
9
partial class Foo
{
    public Foo()
    {
        Initialize();
    }

    partial void Initialize();
}

第二部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
    }
}