Я второй, что говорит KVB. Кроме того, я опускаю new
, потому что это позволяет мне вызывать члены непосредственно в построенном объекте, как в C #. Например, работает следующий код:
DateTime(2012, 12, 21).ToString()
Следующий код не работает и приводит к ошибке компиляции:
new DateTime(2012, 12, 21).ToString()
Так что теперь мне нужно заключить в скобки выражение new
, чтобы его можно было скомпилировать:
(new DateTime(2012, 12, 21)).ToString()
Мне не нравятся дополнительные скобки, поэтому я избегаю использовать new
сейчас.
Один случай , где я все еще использовал бы его, - это когда я создаю объект, который реализует IDisposable
. Это потому, что если я опускаю ключевое слово new
при создании IDisposable
, компилятор F # выдает предупреждение:
let writeFile =
let writer = StreamWriter(@"hello.txt")
writer.WriteLine("hello")
Результаты в этом:
предупреждение FS0760: рекомендуется, чтобы объекты, которые поддерживают
IDisposable интерфейс создается с использованием «нового типа (аргументы)», а не
'Type (args)', чтобы указать, что ресурсы могут принадлежать сгенерированному
значение
Я могу избавиться от предупреждения, добавив ключевое слово new
:
let writeFile =
let writer = new StreamWriter("hello.txt")
writer.WriteLine("hello")
Предупреждение также заставляет меня понять, что у меня действительно должна быть привязка use
для моего IDisposable
:
let writeFile =
use writer = new StreamWriter("hello.txt")
writer.WriteLine("hello")
Но если бы я написал свой код для использования new
все время , я бы никогда не получил предупреждение, напоминающее мне, что я работаю с IDisposable
!!!
Это также позволяет печатать меньше. ; -)