繁体   English   中英

如何在 IntelliSense 中隐藏公共方法

[英]How to hide public methods from IntelliSense

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

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

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

像这样使用EditorBrowsable属性会导致方法不在 IntelliSense 中显示:

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

您正在寻找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; } } } } }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM