当前位置:  开发笔记 > 编程语言 > 正文

隐藏一个功能

如何解决《隐藏一个功能》经验,为你挑选了2个好方法。

我有一个班,负责复杂的科学计算.它被设置为仅允许用户创建正确实例化的案例.但是,要正确测试代码,需要直接设置内部状态变量,因为参考文档在其测试用例中提供了这些数据.但是,如果做得不正确,它可能会使州无效.

所以我必须有能力,一个成员函数,从单元测试程序中设置内部变量.但我想强烈反对普通用户调用此功能.(是的,一个坚定的用户可以捣乱任何东西......但我不想宣传有办法做错事.)

例如,能告诉Intellisense不显示该功能会很高兴.

我目前最好的解决方案就是将函数命名为:DangerousSet().

我还有其他选择吗?

跟进

我发现David B的答案对我的情况最有用.谢谢!
Mufasa建议使用反射很好,但更难实现(对我而言).
克里斯建议使用装饰器很好,但没有成功.
BFree对XML的建议也很好,并且已经在使用,但并没有真正解决问题.

最后,BillTheLizard建议问题出现在源文档中,这不是我可以控制的.国际专家出版高度技术性的书籍和期刊文章供社区使用.他们没有满足我的特殊需求这一事实是生活中的事实.根本没有替代文件.



1> cfeduke..:

您可以使用InternalsVisibleToAttribute将内部成员标记为对测试程序集可见.在这种情况下使用它似乎很闪耀,虽然它不是"朋友".

    标记你的DangerousSet功能internal而不是public.

    在项目的Properties\AssemblyInfo.cs中包含DangerousSet:

    [assembly:InternalsVisibleTo("YourTestAssembly")]

如果由于某种原因有两个测试程序集,则语法为:

[assembly:InternalsVisibleTo("TestAssembly1"), 
    InternalsVisibleTo("TestAssembly2")]



2> core..:

使用此属性装饰您的方法:

[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]

这会将其隐藏在Intellisense之外.

编辑:

但显然这有一个相当重要的警告:"在Visual C#中,EditorBrowsableAttribute不会在同一个程序集中禁止某个类的成员." 通过MSDN.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有