c# - 隐藏函数

标签 c# visual-studio intellisense

我有一个类进行复杂的科学计算。它被设置为只允许用户创建一个正确实例化的案例。然而,要正确测试代码,需要直接设置内部状态变量,因为引用文档在其测试用例中提供了此数据。但是,如果操作不当,它可能会使状态无效。

所以我必须有能力,一个成员函数,从单元测试程序中设置内部变量。但我想强烈劝阻普通用户不要调用这个函数。 (是的,一个坚定的用户可以搞砸任何事情......但我不想宣传有办法做一些错误的事情。)

例如,如果能够告诉 Intellisense 不显示该函数,那就太好了。

我目前拥有的最佳解决方案是将函数命名为:DangerousSet()。

我还有哪些其他选择?

跟进

我发现 Amy B 的回答对我的情况最有用。谢谢!
Mufasa 关于使用反射的建议很棒,但(对我而言)更难实现。
Chris 关于使用装饰器的建议很好,但没有成功。
BFree对XML的建议也不错,已经在用了,但并没有真正解决问题。

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

最佳答案

您可以使用 InternalsVisibleToAttribute将内部成员标记为对您的测试程序集可见。在这种情况下使用它似乎很闪耀,尽管它并不完全是“ friend ”。

  1. 将您的 DangerousSet 函数标记为 internal 而不是 public

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

    [assembly:InternalsVisibleTo("YourTestAssembly")]

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

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

关于c# - 隐藏函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/167760/

相关文章:

visual-studio-2008 - VS 2008 Intellisense 缺失 : the key combination is bound to command which is not currently available

c# - 为什么我不能将标签的标签绑定(bind)到 sql 数据?

c# - 登录 Wpf ... 对吗?

c# - 为什么我的文件没有被我的 Web API 函数的 GET 请求返回?

c# - 如何比较不同的 SQL 表并寻找差异?

c# - 在 Visual Studio 中使用 C# 和 ChromeDriver 进行 MS 测试的 Selenium WebDriver

visual-studio - .vsprops 文件中的 'Delimiter' 和 'InheritsFromParent' 属性是什么意思?

java - 使用 Eclipse 的 xml 智能感知?

visual-studio - Visual Studio 2015 中的 React 没有智能感知

c# - OpenPop 删除消息