FxCop - CA1034 错误 - 为什么?

Tim*_*Tim 4 c# fxcop static-analysis

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

我会理解父类是否被声明为内部或私有,但它是公共的。为什么将 TimerReset 声明为公开是不好的?

我错过了什么,或者这是可以忽略的东西?

感谢您提供任何意见!

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

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);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sol*_*ogi 5

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

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

Page.TimerResetDelegate timer = new Page.TimerResetDelegate();
Run Code Online (Sandbox Code Playgroud)

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

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