一尘不染

使用私有静态方法的优点

c#

当创建一个具有内部私有方法的类(通常是为了减少代码重复)而又不需要使用任何实例字段时,将这种方法声明为静态方法是否具有性能或内存优势?

例:

foreach (XmlElement element in xmlDoc.DocumentElement.SelectNodes("sample"))
{
    string first = GetInnerXml(element, ".//first");
    string second = GetInnerXml(element, ".//second");
    string third = GetInnerXml(element, ".//third");
}

private static string GetInnerXml(XmlElement element, string nodeName)
{
    return GetInnerXml(element, nodeName, null);
}

private static string GetInnerXml(XmlElement element, string nodeName, string defaultValue)
{
    XmlNode node = element.SelectSingleNode(nodeName);
    return node == null ? defaultValue : node.InnerXml;
}

将GetInnerXml()方法声明为静态方法有什么好处?请没有意见回应,我有意见。


阅读 261

收藏
2020-05-19

共1个答案

一尘不染

FxCop规则页面上:

将方法标记为静态后,编译器将向这些成员发出非虚拟调用站点。发出非虚拟调用站点将阻止在运行时检查每个调用,以确保当前对象指针为非空。对于性能敏感的代码,这可以带来可衡量的性能提升。在某些情况下,无法访问当前对象实例表示正确性问题。

2020-05-19