在声明对象时,何时使用new
关键字,何时不使用有什么经验法则可遵循吗?
List<MyCustomClass> listCustClass = GetList();
或者
List<MyCustomClass> listCustClass = new List<MyCustomClass>();
listCustClass = GetList();
在声明对象时,何时使用new
关键字,何时不使用有什么经验法则可遵循吗?
List<MyCustomClass> listCustClass = GetList();
或者
List<MyCustomClass> listCustClass = new List<MyCustomClass>();
listCustClass = GetList();
在第二种情况下,您在第一行创建了一个新对象,只是为了在第二行将其丢弃。这完全是不必要的。
在第二个案例中,您在第一行创建了一个新对象,只是在第二行将其丢弃。这是完全没有必要的。在这种情况下,只有你的第一个示例是有意义的,因为在第二种情况下,你会立即用方法返回的列表替换创建的列表。在需要添加到该列表或调用填充该列表的方法可能导致空值(否则期望为空列表)的情况下,将列表初始化为新的空列表是有意义的。
以下是我可能使用初始化为新的空列表的示例:
List<MyCustomClass> listCustClass = new List<MyCustomClass>();
listCustClass.AddRange( GetList() );
或者List<MyCustomClass> listCustClass = new List<MyCustomClass>();
try
{
listCustClass = GetList();
}
catch (SqlException)
{
}
return listCustClass;
GetList()
方法内部执行的。因此,你的第一个示例将是正确的用法。List<MyCustomClass>
后,它存储在堆中,而listCustClass
只是对该新对象的引用。当你将listCustClass设置为GetList()
时,listCustClass
的引用指针被丢弃并替换为对GetList()
返回内容(可能为空)的引用指针。当发生这种情况时,原始的List<MyCustomClass>
仍然存在于堆中,但没有对象指向它,因此它只是浪费资源,直到垃圾回收器来清理它。new
关键字构造一个对象的新实例。从您的问题中不清楚GetList
方法的作用,但可能是创建一个新列表(因此将new
关键字移到其他位置)或返回一个现有列表(某人曾经使用new
创建过)。如果您可以在不失去意义和清晰度的情况下内联它,那么请务必内联。
编辑:由于我经常进行内联操作,所以我甚至没有考虑过孤立的对象引用。呃。
没有铁律,但通常情况下可以应用常识。
当对象被创建时需要实例化。您的GetList()
函数表面上返回一个(已创建的)IList,因此第二个代码片段是完全不必要的(您实例化了一个IList,并在下一行有效地丢弃它)。
然而,第一个代码片段是完全适当的。
new
关键字创建。如果您当前的上下文中没有使用new
,则可能存在空引用,或者您正在调用使用new
来实例化类的函数。new
来创建一个新列表。