举个例子,我见过很多 C# 代码,如下所示:
XmlNode n = GetXmlNode();
String[] attributes = new String[n.Attributes.Count];
for (int x = 0; x < n.Attributes.Count; x++)
{
//do something
}
现在,如果这是java,我们可以编写类似于以下的代码,但是我们会犯getAttributes()
两次调用该方法的错误,如果我没记错的话,有一条规则说不要多次调用同一个方法,而是声明一个变量来保存对方法调用返回的对象的引用,然后根据需要多次使用该变量。
Node n = GetXmlNode();
String[] attributes = new String[n.getAttributes().getLength()];
for (int x = 0; x < n.getAttributes().getLength(); x++)
{
//do something
}
但是由于 C# 属性只是封装在一个类型成员中的 getter 方法和 setter 方法,是否应该遵循相同的规则?
或者该规则是否不适用于这种情况,因为假设调用标准库中的 C# 属性和 Java get 方法只是返回对字段的引用而不是执行繁重的工作是“安全的”?