为了账号安全,请及时绑定邮箱和手机立即绑定

使用对象初始化器有什么好处?

/ 猿问

使用对象初始化器有什么好处?

慕桂英3389331 2019-11-19 11:13:50

使用C#对象初始化程序有什么好处?


在C ++中,没有引用,并且所有内容都封装在一个对象内,因此使用它们而不是在对象创建后初始化成员是有意义的。


在C#中使用它们的情况是什么?


查看完整描述

3 回答

?
慕前端131612

一个经常错过的好处是原子性。如果您在对象上使用双重检查锁定,这将很有用。对象初始化程序在初始化您告知它的所有成员之后,将返回新对象。从MSDN文章的示例中:


StudentName student = new StudentName

{

    FirstName = "Craig",

    LastName = "Playstead",

    ID = 116

};

将被翻译成以下内容:


StudentName _tempStudent = new StudentName();

_tempStudent.FirstName = "Craig";

_tempStudent.LastName = "Playstead";

_tempStudent.ID = 116;


StudentName student = _tempStudent;

这样可以确保student不会部分初始化。它将被null或完全初始化,这在多线程方案中很有用。


有关此更多的信息,你可以看看这个文章。


另一个好处是,它允许您创建匿名对象(例如,创建投影或在LINQ中连接多个键)。


查看完整回答
反对 回复 2019-11-19
?
慕村9548890

有一个不 使用对象初始化程序的潜在原因:如果初始化期间发生异常,Visual Studio调试器中的调用堆栈将仅返回初始化程序表达式,而不返回发生异常的特定行。


如果您使用命名错误的库或外部服务,或者使用本机代码在看不到引发异常的代码的库中(例如Android上的Xamarin),则对象初始化程序会使调试代码变得更加困难,因为您不知道哪个参数导致引发异常。


示例:假设这是您的代码,但是您无法读取ExternalService的源代码,因为它在您的应用程序外部。您将不知道是造成外部服务错误的“ charlie”参数。


    var instance = new ClassToBeInitialized

    {

        alpha = "alpha", 

        bravo = ExternalService(0),

        charlie = ExternalService(1)

    };


    private static string ExternalService(int parameter)

    {

        if (parameter == 1)

        {

            throw new Exception("The external service crashed");

        }


        return "correctStringResult";

    }


查看完整回答
反对 回复 2019-11-19
?
慕田峪7331174

对象初始化有3个主要好处


避免多次击键。软件程序的效率有时取决于编写特定功能所需的击键次数。


易于阅读和维护。


节省时间的方法。


让我们在这里看看它如何避免很多按键操作:


在c#3.0之前,我们像这样进行初始化-


         public  class Employee  

        {  

            public string Name { get; set; }  

            public int Id { get; set; }  

            public string Department { get; set; }  

            public int salary { get; set; }  

        }  

        class Program  

        {  

            static void Main(string[] args)  

            {  

                Employee emp=new Employee();  

                emp.Name = "Kumar";  

                emp.Department = "IT";  

                emp.Id = 101;  

                emp.salary = 80000;  

                Console.ReadLine();  


            }  

        } 

现在,在c#3.0之后,我们将在一行中进行如下初始化。


class Program  

    {  

        static void Main(string[] args)  

        {  

            Employee emp = new Employee {Name = "Kisan",Id = 55,Department = "IT",salary = 20000};        


        }  

    }  


查看完整回答
反对 回复 2019-11-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信