Jor*_*dan 49 .net c# reflection intellisense encapsulation
我想隐藏intellisense成员列表中的公共方法.我创建了一个属性,当应用于方法时,将导致在构造对象时调用该方法.我这样做是为了更好地支持部分课程.问题是在某些环境(例如Silverlight)中,反射无法访问私有成员,甚至是子类的私有成员.这是一个问题,因为所有工作都是在基类中完成的.我必须将这些方法设为公开,但我希望它们不受intellisense的影响,类似于Obsolete属性的工作原理.坦率地说,因为我是关于对象封装的肛门.我尝试了不同的东西,但实际上没有任何效果.该方法仍显示在成员下拉列表中.
当我不希望客户端调用公共方法时,如何防止公共方法出现在intellisense中?对于一个真正的问题,非利士人怎么样!这也适用于必须公开的MEF属性,但有时您希望将它们从客户端隐藏.
更新: 自从发布此问题以来,我已成熟为开发人员.为什么我如此关心隐藏界面是在我之外.
Adi*_*ter 114
EditorBrowsable像这样使用这个属性会导致一个方法不能在intellisense中显示:
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public void MyMethod()
{
}
Run Code Online (Sandbox Code Playgroud)
Sim*_*imY 15
以下示例演示如何通过为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;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
cad*_*ll0 -4
扩展我对部分方法的评论。尝试这样的事情
Foo.part1.cs
partial class Foo
{
public Foo()
{
Initialize();
}
partial void Initialize();
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22853 次 |
| 最近记录: |