Efr*_*ain 4 c# inheritance stylecop protected
我尽可能地让其他人的代码符合一些StyleCop规则集.现在我想知道以下情况:
我有一个包含字段的抽象类
protected double[] coefficients;
Run Code Online (Sandbox Code Playgroud)
Stylecop说:SA1401:必须使用私人访问声明字段.使用属性公开字段.
所以我改成了:
protected double[] coefficients { get; set; }
Run Code Online (Sandbox Code Playgroud)
Stylecop说:SA1300:属性名称以大写字母开头:系数.
由于它是一个抽象类,因此子类无法控制.他们使用他们父母的课堂base.coefficients......好吧.
那么......除了压制(或禁用)它之外没有别的办法摆脱这个警告吧?:T
嗯,实际上你没有.
如果要在将来的代码版本中清除它,可以设置coefficients不推荐使用的属性,并提供一条消息,指出将在任何其他版本的代码中删除此属性.
在当前版本中:
private double[] _coefficients;
// Using this property will produce a compile-time warning.
[Obsolete("coefficients will be removed in future versions. Use Coefficients instead.")]
protected double[] coefficients
{
get { return _coefficients; }
set { _coefficients = value; }
}
protected double[] Coefficients
{
get { return _coefficients; }
set { _coefficients = value; }
}
Run Code Online (Sandbox Code Playgroud)
在以后的版本中:
private double[] _coefficients;
// Using this property will produce a compile-time error.
[Obsolete("coefficients was removed. Use Coefficients instead.", true)]
protected double[] coefficients
{
get { return _coefficients; }
set { _coefficients = value; }
}
protected double[] Coefficients
{
get { return _coefficients; }
set { _coefficients = value; }
}
Run Code Online (Sandbox Code Playgroud)
即使将字段更改为属性也是一个潜在的破坏性更改。如果您必须保留与您无法控制的已编译二进制文件的兼容性,我什至不建议进行第一个更改。
关于 StyleCop,您必须记住的一点是,它顽固地坚持要求您遵循编码指南,而编码指南与规则实际上并不是一回事。您遇到的两条准则都是完全合理的。在编写新代码时我总是遵循它们。你也应该这样做。但是,如果像您的情况一样,兼容性更重要,那么可能可以忽略 StyleCop 的坚持。
即使您要解决当前的警告,您可能会遇到的下一件事(或者如果没有,它应该,并且 FxCop 肯定会抓住这一点)是数组永远不应该作为接口的一部分公开(意思是,标记为protected或public)。相反,您应该公开类似IEnumerable<T>,IList<T>或 的内容ReadOnlyCollection<T>。
冲洗,起泡沫,重复。如果你不能真正改变代码,你只是在追自己的尾巴。
只是为了看看我是否能让你更加疯狂,我会注意到,如果 FxCop 发现子类在不重写其父类的实现的情况下显式调用其父类的成员,它会大发雷霆。该成员自己。所以基本上,base.coefficients首先是不行的。如果您遵循所有指南,那么遵循它们会更容易。当然,逻辑上的推论是,如果您不遵循所有指南,那么遵循它们就会变得更加困难。