我正在使用 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/