Class ABC
{}Class XYZ
{
ABC _abc;
XYZ(ABC abc)
{
_abc = new ABC(); //这句有必要吗?
_abc = abc;
}}
new

解决方案 »

  1.   

    是呀,你得先实例化一个对象嘛,肯定得new一下
      

  2.   

    不需要。你在构造函数里面已经传递了(ABC abc) 就没必要再new一个了。
      

  3.   

    有下面1句就够了,上面的new多余,下面那就就很清楚体现了这个构造函数的设计意图。
      

  4.   

    看从什么角度理解。
    就好比
    int i = 0;
    i = Console.WriteLine();
    这里i = 0没有必要,就好比你的例子。但是,如果你的代码很多,在定义的时候给一个默认的初始化是一个好习惯。避免因为疏忽,造成在一些代码分支中遗漏初始化操作。
      

  5.   


    这要看具体需求。如果传入的abc有可能是null,并且你不允许_abc为null,那么你需要判断传入的abc,如果为null,直接扔ArgumentNullException。如果_abc是不是null无所谓,那么_abc = new ABC();也不需要有。如果传入的abc必不为null,那_abc = new ABC();一样没有存在的必要。如果传入的abc必为null, well, fuck that
      

  6.   


    这要看具体需求。如果传入的abc有可能是null,并且你不允许_abc为null,那么你需要判断传入的abc,如果为null,直接扔ArgumentNullException。如果_abc是不是null无所谓,那么_abc = new ABC();也不需要有。如果传入的abc必不为null,那_abc = new ABC();一样没有存在的必要。如果传入的abc必为null, well, fuck that
    支持。
    具体问题具体分析,有时候代码逻辑没这么简单,后面直接使用_abc.Method()就有问题了。
    如果这是个Winform控件,如果出问题那所有引用的画面连设计器都打不开了。
      

  7.   

    试验过加与不加都可以运行的。是我表达得不好,其实我理解是,传进构造函数的abc, 在外面已经实例化了,这里只是引用传递,就算在构造函数里new了 _abc,他实际也指向abc的位置。所以觉得new _abc其实不需要也可以,new还浪费了资源。
    #8 的兄弟考虑的很仔细,还考虑了null的情况, 完整程序的却需要加入异常处理的。
      

  8.   


    谢谢斑竹大人,学习了。原来编译器会自动加一个。如果ABC没有默认构造函数,这里不加new的话,可能会出错。回头测试一下。Class ABC 
    {   
     ABC(int tmp)
     {
     }
    }   
    Class XYZ 

     ABC _abc; 
     XYZ(ABC abc) 
     { 
       _abc = new ABC(123); //这句变成了必须的吗?
       _abc = abc; 
     }  
      

  9.   

    你的 代码逻辑看,问一下 new ABC 干什么,后面都没用到。
    没必要,多此一举
      

  10.   

    看你的例子是没必要,但不知道你写这个例子用的原型是什么样的如果这两个类不是你写的,去掉第1句还是有风险的,谁知道new ABC()时会不会发一个post或是往数据库插一句话或是写某个计数器呢,最好留着
      

  11.   

    完全可以删除的,因为你传递进来的abc已经初始化了的
      

  12.   

    要看具体的需求如果外部传入的ABC实例可能为NULL,那么这个New就很有必要了