Технически, одно отличие состоит в том, что вы должны использовать new
при создании IDisposable
объектов, как уже объяснили nyinyithann.Другое отличие состоит в том, что вы можете опустить аргументы типа при создании универсального типа:
// Works and creates Dictionary<int, string>
let r1 = System.Collections.Generic.Dictionary 10
r1.Add(10, "A")
// You get a compiler error when you write this:
let r2 = new System.Collections.Generic.Dictionary 10
r2.Add(10, "A")
Помимо этих двух вещей, нет никаких технических отличий (и, безусловно, нет разницы в сгенерированном IL, когда вы пишете или пропускаетеnew
).
Какой из них использовать, когда? Это вопрос стиля.На это не распространяются никакие стандарты кодирования F #, поэтому это зависит от ваших предпочтений.Теперь, когда я думаю об этом, у меня, наверное, не очень последовательный стиль.Я думаю, что я обычно использую new
при создании экземпляров, которые будут присвоены значениям с использованием let
:
let rnd = new Random()
Однако я обычно не использую new
при создании объектов, которые будут использоваться в качестве аргументов (например, Size
или Point
в следующем примере):
let frm = new Form(Size = Size(600, 400))
let gr = frm.CreateGraphics()
gr.FillRectangle(Brushes.Red, Rectangle(Point(0, 0), Point(100, 100)))
Возможно, я также предпочитаю использовать new
для более сложных типов и избегать его для простых типов или для типов значений .NET (ноЯ не думаю, что я делаю это слишком последовательно).