c# - 有什么理由不使用 `new object().foo()` 吗?

标签 c# java new-operator

当使用生命周期极短且只需要调用一个方法的对象时,我倾向于将方法调用直接链接到 new。一个非常常见的示例如下所示:

string noNewlines = new Regex("\\n+").Replace(" ", oldString);

这里的要点是,在完成一次替换后,我不再需要 Regex 对象,而且我希望能够将其表示为一行。这个成语有什么不明显的问题吗?我的一些同事对此表示不适,但没有任何似乎是好的理由。

(我已将其标记为 C# 和 Java,因为上述习语在两种语言中都很常见且可用。)

最佳答案

这个特殊的模式很好——我自己偶尔也会用到它。

但我不会像您在示例中那样使用这种模式。有两种更好的替代方法。

更好的方法:使用静态方法 Regex.Replace(string,string,string) .当可以使用执行相同操作的静态方法时,没有理由用 new 风格的语法来混淆您的意思。

最佳方法:如果您在同一个方法中使用相同的静态(不是动态生成的)Regex,并且多次调用该方法,则应将 Regex 对象存储为私有(private)静态字段在包含该方法的类上,因为这避免了在每次调用该方法时解析表达式。

关于c# - 有什么理由不使用 `new object().foo()` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502874/

相关文章:

c++ - vector 是否必须存储两次大小?

c# - 我在一个枚举变量中设置了三个枚举常量,有没有办法从枚举变量中以数组形式检索枚举常量?

c# - 依赖注入(inject) : What should be injected where?

java - Spring 和 Thymeleaf session 属性

java - 重定向网络请求

perl - 如何防止在调用new时设置Perl Moose只读属性?

c# - Entity Framework : An object with the same key already exists in the objectstatemanager

c# - 在应用程序启动时实例化一个 ViewModel

java - Miglayout + hidemode 3 = 显示控件时不需要的自动滚动

c++ - 函数中的 "New"和 "delete"