c#中的`new object()`和`new {}`之间有什么区别吗?

Gab*_*art 7 c# syntax anonymous-types

在c#中,

var x = new {};
Run Code Online (Sandbox Code Playgroud)

声明一个没有属性的匿名类型.这有什么不同吗?

var x = new object();
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 10

是的,使用的类型是不同的.您可以在编译时告诉它:

var x = new {};
// Won't compile - no implicit conversion from object to the anonymous type
x = new object(); 
Run Code Online (Sandbox Code Playgroud)

如果你问是否new{}是以往任何时候都非常有用 -很好,那是另一回事......我不能立刻想到它的任何合理的用途.

  • 严格地说,所有C#类和结构类型都从对象继承(或与之相同).接口类型可转换为对象,但不从对象继承.类型参数类型可以转换为有效的基类,它始终从对象继承(或与之相同).指针类型既不继承也不可转换为对象. (4认同)

Jon*_*nas 8

好吧,对于初学者来说,object是一个实际的非匿名类型...如果你在第二个例子中执行x.GetType(),你将得到System.Object.