gpt4 book ai didi

c# - Idisposable 是否在结构等堆栈项上被调用(不使用 "Using"时)

转载 作者:行者123 更新时间:2023-11-30 21:49:18 26 4
gpt4 key购买 nike

撇开在非引用类型上实现 IDisposable 是否是一个可怕的糟糕想法,Dispose() 方法是否会在非引用类型上被调用 IDisposable 从堆栈中移除?

最佳答案

答案是:没有,

仅仅创建一个位于堆栈上的结构不会导致 Dispose() 在超出范围时被调用。 (当然,类也不会发生这种情况。)

Dispose() 只有在显式调用或通过 using 隐式调用时才会被调用。

但是,如果结构实现了 IDisposable 并且在 using 中使用,Dispose() 将被调用,如下所示:

using System;

namespace Demo
{
struct Test: IDisposable
{
public void Dispose()
{
Console.WriteLine("Help! Help! I'm being oppressed!");
}
}
static class Program
{
static void Main()
{
using (var test = new Test())
{
Console.WriteLine("Using a Test object");
}
}
}
}

这输出

Using a Test object
Help! Help! I'm being oppressed!

请注意,结构通常是轻量级的,不应真正包含引用(字符串可能除外)。在那种情况下,结构中不应该有任何一次性的东西,所以不会出现这个问题。

关于c# - Idisposable 是否在结构等堆栈项上被调用(不使用 "Using"时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37051119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com