c# - FxCop - CA1034 错误 - 为什么?

标签 c# static-analysis fxcop

我正在使用 FxCop 1.36 运行静态代码分析,我不断收到 warning CA1034 : NestedTypesShouldNotBeVisible。

如果父类声明为内部类或私有(private)类,我会理解,但它是公共(public)的。为什么将 TimerReset 声明为 public 是不好的?

我是不是遗漏了什么,或者这是可以忽略的东西?

感谢任何输入!

以下是导致此警告的代码摘录:

namespace Company.App.Thing
{
    public partial class Page : XtraPage
    {
        public delegate void TimerResetDelegate(object sender, EventArgs e);
        private TimerResetDelegate _timerReset;

        public Page()
        {
            InitializeComponent();
        }

        public TimerResetDelegate TimerReset
        {
            set
            {
                if (null != (_timerReset = value))
                {
                    checkBox.Click += new EventHandler(_timerReset);
                    textField.Click += new EventHandler(_timerReset);
                    textField.KeyDown += new KeyEventHandler(_timerReset);
                    TimeField.Click += new EventHandler(_timerReset);
                    TimeField.KeyDown += new KeyEventHandler(_timerReset);
                }
            }
        }
    }
}

最佳答案

一般来说,嵌套类型更难“发现”。

例如要使用您的嵌套类型,我必须编写以下内容

Page.TimerResetDelegate timer = new Page.TimerResetDelegate();

尽管上面是有效的 C# 代码,但它读起来不像通常的类型用法。

当你想定义一个内部使用的类型并且你会避免像上面这样的代码时,通常会使用嵌套类型。这就是 FxCop 向您发出警告的原因。如果你愿意,你可以忽略它。就个人而言,我会将我的嵌套类型保持为私有(private)。如果我希望调用者使用该类型,我会将它们移动到适当的命名空间。

关于c# - FxCop - CA1034 错误 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1168120/

相关文章:

c# - 创建同步方法的异步版本

c# - 使用 TPL Dataflow 封装以操作 block 结尾的管道

c# - 有没有办法在 C# 中动态获取方法名称?

ocaml - 在值分析中获取数组索引变量及其值(Frama-C)

gradle - Findbugs Gradle 插件不会使构建失败

c# - C# 的 Sonarqube 5.4 自定义规则

.net - 没有新的 FxCop 抽象类型不应该有构造函数

C# 显示 Oracle 过程中的自定义错误

java - 对于 FindBugs,jar305.jar 中的注释是否应该优于 annotation.jar 中的类似注释?

visual-studio-2008 - VS2008 : Define the same code analysis settings for a whole solution?