我想隐藏intellisense成员列表中的公共方法。我创建了一个属性,当应用于方法时,将导致在构造对象时调用该方法。我这样做是为了更好地支持部分课程。问题是在某些环境(例如Silverlight)中,反射无法访问私有成员,甚至是子类的私有成员。这是一个问题,因为所有工作都是在基类中完成的。我必须公开这些方法,但是我希望它们在智能感知中隐藏,类似于Obsolete
属性的工作方式。坦率地说,因为我是关于对象封装的肛门。我尝试了不同的东西,但实际上没有任何效果。该方法仍显示在成员下拉列表中。
当我不希望客户端调用公共方法时,如何让公共方法不会出现在智能感知中? 真正的问题是怎样的,非利士人!这也可以应用于必须公开的MEF属性,但有时您希望将它们隐藏在客户端中。
更新 自从我发布这个问题以来,我已经成熟为开发人员。为什么我非常关心隐藏界面是在我之外。
答案 0 :(得分:109)
如此使用EditorBrowsable
属性会导致方法无法在intellisense中显示:
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public void MyMethod()
{
}
答案 1 :(得分:15)
以下示例演示如何隐藏类的属性 来自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
}
}