.NET中对象的对象生命周期是什么?
据我所知,它是:
San*_*ken 19
Dispose不会自动调用; 你需要调用它,或者使用一个使用块,例如.
using(Stream s = File.OpenRead(@"c:\temp\somefile.txt"))
// Do something with s
Run Code Online (Sandbox Code Playgroud)
如果GC存在,则仅由GC调用终结器.使用终结器会导致您的课程分两步收集; 首先将对象放入终结器队列,然后调用终结器并收集对象.没有终结器的对象被直接收集.
指南是Dispose删除托管和非托管资源,终结器只清理非托管资源.当Dispose方法释放了非托管资源时,它可以调用GC.SuppressFinalize以避免将对象长时间放在终结器队列上.有关配置模式的正确样本,请参阅MSDN.
Mar*_*ell 17
就像边缘情况一样......你可以在不使用ctor的情况下创建对象:
class Foo {
public Foo() {
message += "; ctor";
}
string message = "init";
public string Message { get { return message; } }
}
static class Program {
static void Main() {
Foo foo = new Foo();
Console.WriteLine(foo.Message); // "init; ctor"
Foo bar = (Foo)System.Runtime.Serialization.FormatterServices
.GetSafeUninitializedObject(typeof(Foo));
Console.WriteLine(bar.Message); // null
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我所知道的步骤:
正如其他人已经指出的那样,Dispose()必须由用户调用,因为运行时不会对其进行操作.
| 归档时间: |
|
| 查看次数: |
11145 次 |
| 最近记录: |