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