这两种语法是等效的(至少我认为是这样)。
let o1 = new Object()
或者let o2 = Object()
你更经常使用哪种方式?可读性问题如何?
这两种语法是等效的(至少我认为是这样)。
let o1 = new Object()
或者let o2 = Object()
你更经常使用哪种方式?可读性问题如何?
我觉得省略 "new" 更加实用,所以这是我的首选。我喜欢你可以像处理其他函数一样处理构造函数并返回一个类型的实例。
我支持kvb所说的。此外,我省略了new
因为这样允许我直接在构造对象上调用成员,就像在C#中一样。例如,下面的代码可以正常工作:
DateTime(2012, 12, 21).ToString()
以下代码无法正常工作并导致编译器错误:new DateTime(2012, 12, 21).ToString()
那么现在我需要在new
表达式中添加括号才能使其编译通过:
(new DateTime(2012, 12, 21)).ToString()
我不喜欢多余的括号,所以现在避免使用 new
。
唯一一个例外情况是当我创建实现 IDisposable
接口的对象时。这是因为如果我在创建 IDisposable
时省略了 new
关键字,F# 编译器会发出警告:
let writeFile =
let writer = StreamWriter(@"hello.txt")
writer.WriteLine("hello")
结果如下:
warning FS0760: 建议使用 'new Type(args)' 创建支持 IDisposable 接口的对象,而不是 'Type(args)',以指示生成的值可能拥有资源
通过添加 new
关键字,可以消除警告:
let writeFile =
let writer = new StreamWriter("hello.txt")
writer.WriteLine("hello")
这个警告也让我意识到,我应该为我的 IDisposable
建立一个 use
绑定:
let writeFile =
use writer = new StreamWriter("hello.txt")
writer.WriteLine("hello")
但是如果我总是使用new
,那么我永远不会得到警告,提醒我正在使用IDisposable
!!!
这也可以减少打字。 ;-)
new
,而只在必要时使用 use
。对括号进行深思熟虑可以产生干净的代码。 - bugfoot它们是相同的。
我更喜欢使用'new',虽然没有什么好理由,只是因为在其他语言中我习惯用这个词,而且它使得在构造函数调用中查找str/grep变得更容易(缺少智能工具来在解决方案中“查找所有引用”)。