以下摘录来自 FX Cop 警告。
不访问实例数据或调用实例方法的方法可以标记为静态(在 Visual Basic 中为共享)。将方法标记为静态后,编译器将向这些成员发出非虚拟调用站点。发出非虚拟调用站点将阻止在运行时对每个调用进行检查,以确保当前对象指针不为空。这可以为性能敏感的代码带来可衡量的性能增益。在某些情况下,无法访问当前对象实例代表了正确性问题。
如果私有方法不访问实例数据或方法,我了解将其设为静态的性能优势,但我不确定在大多数情况下上述建议是否良好。如果您正在编写对性能至关重要的代码,并且您别无选择,那么您可以用 c# 编写它,我可以理解这种情绪,但考虑到一般来说,健壮、易于阅读和易于重构的代码应该优于性能你真的听从了这个建议吗?
私有静态方法的问题是,当您需要重构一个类时,我发现静态方法使这样做变得更加困难。如果您有大量静态方法,并且您需要更改一个以使用实例变量,并且该方法被其他私有静态方法使用,那么您最终必须进行更多更改才能使其正常工作。下面是一个例子(请记住,这是一个最小的实现,只是为了说明这一点):
public class Test
{
private IService myService;
private static void DoSomething()
{
DoSomethingElse();
}
private static void DoSomethingElse()
{
DoSomethingMore();
}
private static void DoSomethingMore()
{
Console.Write("DO SOMETHING");
}
}
如果我想myService
在 DoSomethingMore 方法中使用,这意味着我不仅必须使该方法成为非静态方法,而且还要使前两个方法成为非静态方法。这似乎很麻烦。
其他人对此有何看法?