C# 是否有不使用的用例;这";调用GC.SuppressFinalize(此)时?
我刚刚实现了Dispose模式,当我刚刚键入C# 是否有不使用的用例;这";调用GC.SuppressFinalize(此)时?,c#,design-patterns,garbage-collection,C#,Design Patterns,Garbage Collection,我刚刚实现了Dispose模式,当我刚刚键入GC.SuppressFinalize(this)行时,我想知道是否有一个用例可以使用this以外的东西作为方法的参数 这是典型的模式: public void Dispose() { Dispose(true); GC.SuppressFinalize(this); // right here } 使用非this的东西调用GC.SuppressFinalize()有意义吗 public void Dispose() { D
GC.SuppressFinalize(this)
行时,我想知道是否有一个用例可以使用this
以外的东西作为方法的参数
这是典型的模式:
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this); // right here
}
使用非this
的东西调用GC.SuppressFinalize()
有意义吗
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(foo); // should this ever happen?
}
根据MSDN:
事实上,您的示例可能是:GC.SuppressFinalize(foo)
将在某些场景中使用,但不在公共dispose模式的场景中使用
在本例中,您可能希望为许多对象编写某种类型的dispose管理模式,而不是从对象内部实现公共dispose模式。另一种选择是,如果您希望对象保持被抑制状态,以后可能会声明它?从来没有那样做过。。但这是可能的
所以有可能是的。。可能不会发生,也可能永远不会发生。我唯一能想象到有用的是,如果您使用的第三方类具有终结器和Dispose()方法,但由于某种原因它不调用
GC.SuppressFinalize()
本身。然后,在为对象显式调用Dispose()之后,理论上可以通过为对象显式调用SuppressFinalize()来修复它。但这听起来很牵强。当然有一些用途,只是不太常见。在对象池之类的东西中。但这不是一个很好的问题,没有太多的情况。另外,根据侧边栏上的问题(我应该在什么时候使用GC.superssFinalize()?),最上面的答案是“请注意,不要试图在其他对象上调用SuppressFinalize”。这是一个即将发生的严重缺陷。|是的,您可以使用“this”以外的其他内容,但前提是您使用VB.NET调用该方法。GC.SuppressFinalize(我):@henkholtman也许这不是最好的问题,但我认为评论提供的见解很有帮助。我现在很好奇那些不常见的用例是什么。