New()和new class()之间的区别是什么,因为它们似乎都运行时没有区别.

Human John = new();

Human John = new Human();

Let's say in this context it does not make any difference, could anyone provide an example of which both cases would result in different outputs f或 each code. Thanks!

推荐答案

你问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表达式.

Csharp相关问答推荐

利用.NET 8中的AddStandardResilienceDeliveries和AddStandardHedgingDeliveries实现Resiliency

Microsoft.AspNetCore.Mvc. Controller Base.用户:属性或索引器Controller Base.用户无法分配给--它是只读的

Dapper是否可以自动扩展类成员

需要深入了解NpgSQL DateTimeOffset处理

哪个nuget包含SecurityStampValidatorOptions

. NET 8使用COM向VB6公开

为什么Blazor值在更改后没有立即呈现?

此反射有什么问题.是否发送值转换委托?

Blazor EventCallback<;MyType<;T>;>;

net中从位图获取坐标和绘制折线

如何比较C#中的L和ł(波兰字符)返回TRUE

如何在GRPC代码First服务的返回类型上使用多态性?

岛屿和框架中的自定义控件库.Navigate-AccessViolationException

C#如何获取字符串中引号之间的文本?

为什么Swashbakle/Swagger在参数中包含变量名?

如何设置WinForms按钮焦点,使其看起来像是被Tab键插入其中?

C#中COM对象的实际地址

.NET文档对继承的困惑

我可以阻止类型上的Object.ToString()吗?

CsvHelper在第二次迭代时抛出System.ObjectDisposedException