【问题标题】:Access modifier warning with internal class and private props带有内部类和私有道具的访问修饰符警告
【发布时间】:2013-11-30 13:34:26
【问题描述】:
[Export(typeof(IExample))]
internal class Example : IExample
{
    private static IEnumerable<string> Process()
    {
        // do stuff and yeild return
    }

    private HashSet<string> myHash = new HashSet<string>(Process());

    public someType MemberFunction(typeA _a, typeB _b, typeC _c)
    {
        if(!myHash.Contains(/* blah blah */))

         // do more stuff and return
    }
}

注意:MemberFunction() 在项目的其余部分有 20 多个引用

然而,我收到了CA1811:

CA1811 避免未调用的私有代码“Example.Process()”似乎没有上游公共或受保护的调用者。

有没有办法绕过它,而不抑制这个警告?

【问题讨论】:

  • 为什么不发布确切的警告信息?
  • @RohitVats, Process() 结果传递给myHash的构造函数!
  • IMO,这个代码分析警告会导致很多误报,就压制吧。文档甚至说压制是安全的。

标签: c# code-analysis access-modifiers


【解决方案1】:

由于某种原因,您的课程似乎是 internal 到您的程序集,但您却是 Exporting 它。

你的编译器只能看到它是内部的,并且你的函数不是从你的类所在的程序集中调用的。它看不到你的导出/导入的黑魔法背后。

如果你 Export 某事,它应该是公开的。这就是重点。

【讨论】:

  • 你确定吗?我的目的是让实现者知道它在那里,所以将来他们不会使用IEaxmple 来实现它,而是从另一个接口隐式调用内部实现。像 Microsoft.Html.CoreMicrosoft.Less.CoreMicrosoft.Css.Core 程序集(用于 AST 和解析)有一堆这样的内部(但暴露给程序集)类。
猜你喜欢
  • 2011-04-18
  • 1970-01-01
  • 2014-08-27
  • 2020-05-04
  • 2010-12-24
  • 2011-01-31
  • 2017-12-22
  • 2011-02-19
相关资源
最近更新 更多