在声明对象时,什么时候使用new关键字,什么时候不使用,有没有一个经验法则可以遵循?
List<MyCustomClass> listCustClass = GetList();或
List<MyCustomClass> listCustClass = new List<MyCustomClass>();
listCustClass = GetList();发布于 2009-04-20 16:18:02
在您的场景中,对象的实际创建似乎是在GetList()方法中执行的。所以你的第一个样本应该是正确的用法。
在创建时,您的List<MyCustomClass>存储在堆中,并且您的listCustClass只是对这个新对象的引用。当您将listCustClass设置为GetList()时,listCustClass的引用指针将被丢弃,取而代之的是指向GetList()返回的任何内容的引用指针(可能为null)。当这种情况发生时,你的原始List<MyCustomClass>仍然在堆中,但是没有对象指向它,所以它只是浪费资源,直到垃圾收集器过来清理它。
总结一下,每次你创建一个新的对象,然后放弃它,就像第二个例子一样,你基本上是在浪费内存,用无用的信息填满堆。
发布于 2009-04-20 16:06:14
在第二种情况下,您在第一行创建了一个新对象,只是为了在第二行中丢弃它。完全没有必要。
发布于 2009-04-20 16:05:52
在这种情况下,只有第一个示例有意义,因为在第二个示例中,您会立即用该方法返回的列表替换创建的列表。将列表初始化为新的空列表在以下情况下是有意义的:您要添加到该列表中,或者当您调用填充列表的方法可能会导致空值时,否则会出现空列表。
我可能使用初始化到一个新的空列表的例子。
List<MyCustomClass> listCustClass = new List<MyCustomClass>();
listCustClass.AddRange( GetList() );或
List<MyCustomClass> listCustClass = new List<MyCustomClass>();
try
{
listCustClass = GetList();
}
catch (SqlException)
{
}
return listCustClass;https://stackoverflow.com/questions/768922
复制相似问题