Должен ли я использовать новый тип() или просто Type() для вызова конструктора
Оба синтаксиса эквивалентны (по крайней мере, я полагаю, что они есть).
let o1 = new Object()
или
let o2 = Object()
Каким образом вы используете чаще? Что относительно проблем с читабельностью?
Ответы
Ответ 1
Они одинаковы.
Я предпочитаю использовать "новый", с небольшой веской причиной, кроме того, что я привык на других языках, и это упрощает findstr/grep для вызовов конструктора (отсутствие интеллектуальных инструментов для "поиска всех ссылок" в решение).
Ответ 2
Я чувствую, что опускание "нового" немного более функционально, так что я предпочитаю. Мне нравится, что вы можете рассматривать конструктор так же, как любую другую функцию, возвращающую экземпляр типа.
Ответ 3
Во-вторых, что говорит kvb. Кроме того, я опускаю new
, потому что это позволяет мне ссылаться на элементы непосредственно на построенный объект, как на С#. Например, работает следующий код:
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")
Результаты в этом:
warning FS0760: рекомендуется, чтобы объекты, поддерживающие Интерфейс IDisposable создается с использованием "new Type (args)", а не '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
!!!
Он также уменьшает количество ввода.; -)