如何解决C#对象初始化程序-包括构造函数调用括号吗?
我是新的C#开发人员。
我有一个班级雇员
声明带有和不带有“ ()”的对象时,存在区别。 Visual Studio不会标记错误 。例如
Employee newEmployee = new Employee() { FirstName = "David",LastName = "HasselHoff",Email_ID ="dh@fdh.com" };
或
Employee newEmployee = new Employee { FirstName = "David",Email_ID ="dh@fdh.com" };
解决方法
您到那里的代码示例没有什么区别。括号是完全可选的。
尽管有所不同,但还是会有一些差异
首先,如果您的Employee类具有要为其提供参数的非默认构造函数,则在将参数传递给构造函数的同时,您不能省略括号。
Employee newEmployee = new Employee(employeeId) { FirstName = "David",LastName = "HasselHoff",Email_ID ="dh@fdh.com" };
第二个:C#的下一版本(9),其中类型定位得到了改进,因此,如果您已经声明了要创建的类型,则无需包括类的名称:
Employee newEmployee = new() { FirstName = "David",Email_ID ="dh@fdh.com" };
在这种情况下省略括号会使编译器认为您正在尝试创建匿名类型。
,“()”中的括号和内容称为constructor。如果您的类不需要任何参数,则可以在不带括号的情况下实例化该对象。看看this,它提供了有关如何实例化带括号和不带括号的对象的多个示例。
希望您喜欢C#
,如果没有将任何参数传递给构造函数,则可以跳过左括号和右括号。
您可以详细了解here。
Cat cat = new Cat { Age = 10,Name = "Fluffy" };
Cat sameCat = new Cat("Fluffy"){ Age = 10 };
类Cat
具有重载的构造函数,因此您可以将Name
作为参数传递。
这些是匿名的对象初始化器。有两种情况:
- 当必须在构造函数中传递某些内容时,则必须使用
::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" };
括号。
()
这两个都是相同的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。