Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有不使用的用例;这";调用GC.SuppressFinalize(此)时?_C#_Design Patterns_Garbage Collection - Fatal编程技术网

C# 是否有不使用的用例;这";调用GC.SuppressFinalize(此)时?

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

我刚刚实现了Dispose模式,当我刚刚键入
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也许这不是最好的问题,但我认为评论提供的见解很有帮助。我现在很好奇那些不常见的用例是什么。