gpt4 book ai didi

.net - 实例化类型 : when using new?

转载 作者:行者123 更新时间:2023-12-04 22:25:01 26 4
gpt4 key购买 nike

我在 f# 中有一个映射类的类型,如下所示:

type MyClass =
val myval: integer
new () = {
myval = 0;
}
member self.MyVal with
get () = self.myval

好吧,我想创建这个类的一个实例。
我可以这样做:
let myinstance = MyClass ()

或者
let myinstance = new MyClass ()

有什么不同?
我可以两者都做吗?

最佳答案

从技术上讲,一个区别是您应该使用 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")

除了这两件事之外,没有技术差异(当您编写或省略 new 时,生成的 IL 肯定没有差异)。

你应该在什么时候使用哪一个? 这是风格问题。这不在任何 F# 编码标准中,因此这取决于您的偏好。现在想来,我自己的风格可能不是很一致。我想我一般用 new使用 let 创建要分配给值的实例时:
let rnd = new Random()

但是,我通常不使用 new创建用作参数的对象时(例如, SizePoint 在以下示例中):
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 值类型(但我不认为我这样做太一致)。

关于.net - 实例化类型 : when using new?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com