如何隐藏intellisense中的公共方法

时间:2012-01-31 20:06:16

标签: c# .net reflection intellisense encapsulation

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

当我不希望客户端调用公共方法时,如何让公共方法不会出现在智能感知中? 真正的问题是怎样的,非利士人!这也可以应用于必须公开的MEF属性,但有时您希望将它们隐藏在客户端中。

更新 自从我发布这个问题以来,我已经成熟为开发人员。为什么我非常关心隐藏界面是在我之外。

3 个答案:

答案 0 :(得分:109)

如此使用EditorBrowsable属性会导致方法无法在intellisense中显示:

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

答案 1 :(得分:15)

您正在寻找EditorBrowsableAttribute

  

以下示例演示如何隐藏类的属性   来自IntelliSense,通过设置适当的值   EditorBrowsableAttribute属性。在自己的程序集中构建Class1。

     

在Visual Studio中,创建一个新的Windows应用程序解决方案,然后添加一个   对包含Class1的程序集的引用。在Form1中   构造函数,声明一个Class1的实例,键入该名称   实例,然后按周期键激活IntelliSense   Class1成员的下拉列表。 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;
                }
            }
        }
    }
}

答案 2 :(得分:0)

扩展我对部分方法的评论。试试这样的事情

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
    }
}