当前位置:编程学习 > C#/ASP.NET >>

请教一下:这种情况下,需要new 吗?


Class ABC
{

}

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

}
new --------------------编程问答-------------------- 需要
你没提供,编译器会自动加一个
其实,自己试一下不就知道了 --------------------编程问答-------------------- 绝对不需要!
--------------------编程问答--------------------
引用 1 楼 hdt 的回复:
需要
你没提供,编译器会自动加一个
其实,自己试一下不就知道了
是呀,你得先实例化一个对象嘛,肯定得new一下 --------------------编程问答-------------------- 毫无意义,完全可以删掉那一句话。 --------------------编程问答-------------------- 不需要。你在构造函数里面已经传递了(ABC abc) 就没必要再new一个了。 --------------------编程问答-------------------- 有下面1句就够了,上面的new多余,下面那就就很清楚体现了这个构造函数的设计意图。 --------------------编程问答-------------------- 看从什么角度理解。
就好比
int i = 0;
i = Console.WriteLine();
这里i = 0没有必要,就好比你的例子。

但是,如果你的代码很多,在定义的时候给一个默认的初始化是一个好习惯。避免因为疏忽,造成在一些代码分支中遗漏初始化操作。 --------------------编程问答--------------------
引用 楼主 tango119 的回复:

Class ABC
{

}

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

}


这要看具体需求。如果传入的abc有可能是null,并且你不允许_abc为null,那么你需要判断传入的abc,如果为null,直接扔ArgumentNullException。

如果_abc是不是null无所谓,那么_abc = new ABC();也不需要有。

如果传入的abc必不为null,那_abc = new ABC();一样没有存在的必要。

如果传入的abc必为null, well, 易做图 that --------------------编程问答-------------------- 不用 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 试试看啊!程序都在手里你试试就知道了。但是好像没有多大影响 --------------------编程问答--------------------
引用 8 楼 ktei2008 的回复:
Quote: 引用 楼主 tango119 的回复:


Class ABC
{

}

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

}


这要看具体需求。如果传入的abc有可能是null,并且你不允许_abc为null,那么你需要判断传入的abc,如果为null,直接扔ArgumentNullException。

如果_abc是不是null无所谓,那么_abc = new ABC();也不需要有。

如果传入的abc必不为null,那_abc = new ABC();一样没有存在的必要。

如果传入的abc必为null, well, 易做图 that

支持。
具体问题具体分析,有时候代码逻辑没这么简单,后面直接使用_abc.Method()就有问题了。
如果这是个Winform控件,如果出问题那所有引用的画面连设计器都打不开了。 --------------------编程问答-------------------- 试验过加与不加都可以运行的。是我表达得不好,其实我理解是,传进构造函数的abc, 在外面已经实例化了,这里只是引用传递,就算在构造函数里new了 _abc,他实际也指向abc的位置。所以觉得new _abc其实不需要也可以,new还浪费了资源。
#8 的兄弟考虑的很仔细,还考虑了null的情况, 完整程序的却需要加入异常处理的。 --------------------编程问答--------------------
引用 1 楼 hdt 的回复:
需要
你没提供,编译器会自动加一个
其实,自己试一下不就知道了


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

Class ABC 
{   
 ABC(int tmp)
 {
 }
}   
Class XYZ 

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


--------------------编程问答-------------------- 你的 代码逻辑看,问一下 new ABC 干什么,后面都没用到。
没必要,多此一举 --------------------编程问答-------------------- 看你的例子是没必要,但不知道你写这个例子用的原型是什么样的

如果这两个类不是你写的,去掉第1句还是有风险的,谁知道new ABC()时会不会发一个post或是往数据库插一句话或是写某个计数器呢,最好留着 --------------------编程问答-------------------- 完全可以删除的,因为你传递进来的abc已经初始化了的 --------------------编程问答-------------------- 就你上面给出的代码,不需要,其他情况下最好了,这是个人习惯来的 --------------------编程问答-------------------- 如果构造函数是有参数的,这么做的话可以用新的参数去构造一个新的对象。 --------------------编程问答-------------------- 传参的时候应该就初始化了呀,完全不需要 --------------------编程问答-------------------- 要看具体的需求

如果外部传入的ABC实例可能为NULL,那么这个New就很有必要了
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,