C#对象初始化程序-包括构造函数调用括号吗?

时间:2020-08-11 21:52:37

标签: c# object

我是新的C#开发人员。

我有一个班级雇员

声明带有和不带有“ ()”的对象时,存在区别。 Visual Studio不会标记错误 。例如

Employee newEmployee = new Employee() { FirstName = "David", LastName = "HasselHoff", Email_ID ="dh@fdh.com" };

Employee newEmployee = new Employee { FirstName = "David", LastName = "HasselHoff", Email_ID ="dh@fdh.com" };

4 个答案:

答案 0 :(得分:3)

您到那里的代码示例没有什么区别。括号是完全可选的。

尽管有所不同,但还是会有一些差异

首先,如果您的Employee类具有要为其提供参数的非默认构造函数,则在将参数传递给构造函数的同时,您不能省略括号。

Employee newEmployee = new Employee(employeeId) { FirstName = "David", LastName = "HasselHoff", Email_ID ="dh@fdh.com" };

第二个:C#的下一版本(9),其中类型定位得到了改进,因此,如果您已经声明了要创建的类型,则无需包括类的名称:

Employee newEmployee = new() { FirstName = "David", LastName = "HasselHoff", Email_ID ="dh@fdh.com" };

在这种情况下省略括号会使编译器认为您正在尝试创建匿名类型。

答案 1 :(得分:2)

“()”中的括号和内容称为constructor。如果您的类不需要任何参数,则可以在不带括号的情况下实例化该对象。看看this,它提供了有关如何实例化带括号和不带括号的对象的多个示例。

希望您喜欢C#

答案 2 :(得分:1)

如果没有将任何参数传递给构造函数,则可以跳过左括号和右括号。

您可以详细了解here

Cat cat = new Cat { Age = 10, Name = "Fluffy" };
Cat sameCat = new Cat("Fluffy"){ Age = 10 };

Cat具有重载的构造函数,因此您可以将Name作为参数传递。

答案 3 :(得分:1)

这些是匿名的对象初始化器。有两种情况:

  • 当必须在构造函数中传递某些内容时,则必须使用::This is a placeholder file to check if VBScript is running SET File="%TEMP%\jobrunning.txt" del /F /Q %File% ::Print Each File in Array for /l %%n in (0,1,%arrsize%) do ( SET FILEPATH="FILEPATH=!file[%%n]! GoTo file_exists ) ::Is Job Still Running? :file_exists IF EXIST %File% ( GoTo :file_exists ) ELSE ( ECHO %PFUNC% %FILEPATH% %PFUNC% %FILEPATH% EXIT /B ) 括号。
()
  • 如果不必在构造函数中传递某些内容,则可以选择是否使用Employee newEmployee = new Employee("David") { LastName = "HasselHoff", Email_ID ="dh@fdh.com" }; 括号。
()

这两个都是相同的。