你问new()
和new class()
之间的区别.目前尚不清楚class
指的是什么.Which class?
如果它可以是任何类,那么new()
和new class()
会产生不同输出的一个普通情况是,当class
是您要将其分配到的类型的派生类时.object x = new();
将创建object
的实例,而object x = new StringBuilder();
将创建新的StringBuilder
.
如果您的意思是class
必须与您要赋值的类型相同,那么new()
和new class()
将产生不同输出的情况是当您为可空类型赋值时.
int? x = new(); // same as int? x = 0;
int? x = new int?(); // same as int? x = null;
因为本例中的目标类型是不可为空的int
类型.
还要注意,有时您要分配的类型不能用语法new class()
实例化--例如当它是接口、抽象类、数组类型等时.在这些情况下,new()
也不起作用.
也有一些情况,new()
根本不能编译,但new class()
可以编译,对于大约class
个.例如var x = new();
、SomeGenericMethod(new())
,其中SomeGenericMethod
需要第一参数的类型来推断类型参数.这些都不起作用,因为编译器无法确定应该实例化什么类型new()
.另请参阅this question年的一个有趣 case .
了解关于new()
的更多信息,也就是目标类型的new
表达式.