当创建一个具有内部私有方法的类时,通常是为了减少代码重复,不需要使用任何实例字段,将方法声明为静态是否有性能或内存优势?
例子:
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() 方法声明为静态方法有什么好处吗?请不要发表意见,我有意见。
来自FxCop 规则页面:
将方法标记为静态后,编译器将向这些成员发出非虚拟调用站点。发出非虚拟调用站点将阻止在运行时对每个调用进行检查,以确保当前对象指针不为空。这可以为性能敏感的代码带来可衡量的性能提升。在某些情况下,无法访问当前对象实例代表了正确性问题。