我对何时使用New感到有些困惑。这两个陈述有什么区别:
List<myObject> myData = GetDataFromDatabase(id);
和
List<myObject> myData = new List<myObject>();
myData = GetDataFromDatabase(id);
对于第二种用法,Resharper给了我这个警告:
仅分配局部变量myData,但从不使用其值
GetDataFromDatabase(id)
的返回类型为List(Of myObject)
。
由于
答案 0 :(得分:4)
当您创建对象的新实例时,您需要使用new
。
如果您调用返回实例的方法,则使用new
代替您。
例如:
List<myObject> myData = GetDataFromDatabase(id)
List<myObject> GetDataFromDatabase(int id)
{
// Here "they" used the new keyword.
return new List<myObject>();
}
答案 1 :(得分:2)
使用new
实例化对象。
对GetDataFromDatabase
的调用返回一个对象,由该函数决定实例化一个新对象,还是返回一个现有对象。
来自Resharper的警告是准确的。您的第二个代码块实例化一个新对象,并在myData
中存储对该新对象的引用:
List<myObject> myData = new List<myObject>();
然后,您的代码会立即丢失该引用,将其替换为函数调用返回的内容:
myData = GetDataFromDatabase(id);
换句话说,第一行,使用new
的行是没有意义的,不应该出现。
答案 2 :(得分:0)
在第二个示例中,您将创建一个新对象。 您可以将myData的引用更改为另一个对象(由方法创建) 因此,您创建的对象没有对它的引用,它将在下一个垃圾收集周期中从内存中删除。简而言之,第二个例子毫无意义。 如果不使用它,为什么要创建一个新对象?
答案 3 :(得分:0)
new
关键字为对象分配内存并返回对象的引用,因此您可以使用它。如果调用方法并且此方法返回对对象的引用,则不需要为此对象分配内存。
答案 4 :(得分:0)
如果您创建对象的New
实例,则使用new关键字。我不知道方法GetDataFromDatabase
是什么,我假设它返回一个列表,这就是为什么你可以使用方法调用实例化一个新列表。
这样,将要创建的新列表将是该方法返回的列表的副本。
简而言之,new关键字用于创建对象的新实例。有人称这是与其他班级的关系。
答案 5 :(得分:0)
如果GetDataFromDatabase
函数返回List<myObject>
的新实例,则实际上不需要创建new List<myObject>();
然后GetDataFromDatabase(id);
使用new
关键字时,您要求创建List<myObject>
的新实例,但是当您使用myData = GetDataFromDatabase(id);
时,您需要创建一个新实例,GC会收集前一个
答案 6 :(得分:0)
重塑器只是告诉您,您将值放入列表中,但您不对列表中的值执行任何操作。
答案 7 :(得分:0)
我同意所有答案。我会尝试根据一些有趣的观点程序员给出一个最好的例子。
新操作员的某些观点
以下与新操作员一起使用的简单程序。
class Program
{
int x = 20;
public void pro1()
{
Console.WriteLine( this.x);
Console.WriteLine("pr1 call");
}
}
static class porgram2
{
static int x = 10;
public static void pro2()
{
Console.WriteLine( porgram2.x); //Not need a object
Console.WriteLine("pro2 call");
// This keyword is not allowed.
}
static void Main(string[] args)
{
porgram2.pro2(); // no need a object created.
Program pr = new Program();//Must be a created object.
pr.pro1();
Program pr2 = new Program(); // i have many time of create a object.
pr2.pro1();