Должен ли я использовать новый тип() или просто 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!!!

Он также уменьшает количество ввода.; -)