static void Main(string[] args)
{
foo f1 = new foo();
string s1 = f1.fooMethod();
string s2 = (new foo()).fooMethod();
// Does anonymous object destroys here?
// some more code....
//....
//....
//....
//....
// f1 is accessible here also
// some more code....
//....
//....
//....
//....
// f1 is accessible here also
}
class foo
{
public string fooMethod()
{
return "fooMethod called";
}
}
在上面的代码中,我使用(new foo())
语法创建了一个匿名对象(我想这就是这些对象被称为)和一个f1
对象。
现在f1
可以在整个代码块中访问,但匿名对象不是(当然)。
问题是:
f1
对象创建相比较差(特别是当我们
需要只调用该类的一个方法,如本例)?答案 0 :(得分:3)
我想这就是这些对象的名称
我对此不太确定。 MSDN无法识别匿名对象。它只是一个对象,你没有提供比你需要更长的参考。但是,CLR会保留引用,直到进行垃圾回收。
这个匿名对象一旦完成工作就会在下一行中销毁吗?
不一定。
与f1对象创建相比,这种创建匿名对象的方式是好还是坏
不,没关系。我将在接下来的几行中解释GC的基础知识。
那么在.NET中如何回收内存呢?
为资源(例如对象)分配内存时,它将存储在托管堆上的第0代中。当这一代充满了对象时,GC运行
答案 1 :(得分:0)
当您使用word' access'在你的评论中,实际上你的意思是变量范围。当你使用word' destroy'时,实际上你的意思是垃圾收集。它们完全不同。一个是C#语法,另一个是CLR运行时行为。
回答你的具体问题: