.net 什么时候“new”不是可选的?
我必须使用.net 什么时候“new”不是可选的?,.net,f#,functional-programming,.net,F#,Functional Programming,我必须使用new创建基于现有基本类型或接口的动态创建的匿名对象类型的新实例,使用对象表达式: let a = { new System.Object() with member x.ToString() = "F#" } 但在其他情况下,例如计算表达式,我根本不需要编写new: type MaybeBuilder() = member this.Bind(x, f) = match x with | None -> Non
new
创建基于现有基本类型或接口的动态创建的匿名对象类型的新实例,使用对象表达式:
let a = { new System.Object() with member x.ToString() = "F#" }
但在其他情况下,例如计算表达式,我根本不需要编写new
:
type MaybeBuilder() =
member this.Bind(x, f) = match x with
| None -> None
| Some a -> f a
member this.Return(x) = Some x
let maybe = new MaybeBuilder()
ley maybe2 = MaybeBuilder()
我想问一下,什么时候
new
不是一个可选的写作工具?您的两个示例使用了完全不同的语言功能,尽管它们使用了相同的new
关键字
您永远不需要使用new
来调用构造函数,如第二个示例所示(与必须使用构造函数的C#相反)
但在F#中,
new
关键字也用于对象表达式功能,如第一个示例所示。这是必要的,因为F#中的花括号有不同的用途。编译器只知道您正在编写对象表达式,因为它看到{new
此函数的可能重复项不是重复项,因为它涉及对象表达式-另一个答案不是。除非调用实现IDisposable
的类的构造函数,在这种情况下,省略new
会导致警告(在链接问题中提到)。