Stylecop - 在我的继承层次结构中是x类吗?

时间:2011-03-03 12:23:30

标签: c# inheritance hierarchy stylecop

有没有办法检查我的元素类元素是否在其继承层次结构中有某个其他类?

我的用例是:我必须检查我的例外是否以“例外”为前缀。为此,我必须以某种方式确定某个类是否是例外。我可以肯定的唯一方法是它是否由Exception类本身继承。

检查基类类型是否为异常很容易,但想象一下以下情况:

class GenericMathException : Exception{}
class SpecificMathException : GenericMathException{}

我可以获得的关于SpecificMathException的唯一信息是它的基类类型是GenericMathException,但我不能再继续使用它的继承层次结构了。

通常的反思方法也不能用,afaik。

那么,有没有人不得不处理这个问题并找到解决方案?或者有任何其他方法来识别例外情况?

提前致谢。

1 个答案:

答案 0 :(得分:0)

就其本质而言,StyleCop确实只适用于文件的内容,不能使用程序集本身的信息。

但是,如果您询问“识别例外的替代方法”,StyleCop+中有一条规则会执行非常接近您的检查。您指定了基类列表(默认为AttributeExceptionEventArgsStream),并确保从它们继承的所有类都具有以...Attribute...Exception等等。

检查按以下方式进行。如果基类的名称以列表中的字符串结尾,则它确保继承类的名称也应以相同的字符串结尾。例如,如果它符合Class2 : InvalidOperationExceptionClass2 : SomeUnknownException,则会在两种情况下都引发违规行为。

假设您遵循此规则,所有继承的类将始终被命名,即使它们是多重继承的。唯一不能以这种方式检查的是,您处理的某些类不是来自“你的”程序集,而是已经破坏了这个规则。例如,如果某个程序集有Class2 : Exception,并且您将此程序集引用为二进制文件(并且没有机会使用StyleCop进行检查),那么您将无法检查Class3是否继承自Class2应以...Exception为前缀。

但是练习表明最后一个问题相当罕见,因此上述方法对StyleCop非常有用。