gpt4 book ai didi

c# - "Using{}"是处置对象的好习惯,即使没有引用它的变量

转载 作者:行者123 更新时间:2023-11-30 19:05:27 25 4
gpt4 key购买 nike

在我的公司,我看到这样的代码

using (LoggerFactory.GetTracer(_log.ModuleName + "._GetAccessTokenFromWns"))
{...}

当我查找时,我了解到它处理由在“Using”括号内声明的变量引用的对象。

对于像上面这样没有变量引用工厂返回的对象的代码,它是否也有帮助?

谢谢,

最佳答案

在我看到你的问题后,我写了一个像这样的简单代码:

using (new FileStream("sample.txt",FileMode.CreateNew))
{

}

然后我查看生成的 IL 代码:

    .method private hidebysig static void  Main(string[] args) cil managed
{
.entrypoint
// Code size 35 (0x23)
.maxstack 2
.locals init ([0] class [mscorlib]System.IO.FileStream CS$3$0000,
[1] bool CS$4$0001)
IL_0000: nop
IL_0001: ldstr "asdas.txt"
IL_0006: ldc.i4.1
IL_0007: newobj instance void [mscorlib]System.IO.FileStream::.ctor(string,
valuetype [mscorlib]System.IO.FileMode)
IL_000c: stloc.0
.try
{
IL_000d: nop
IL_000e: nop
IL_000f: leave.s IL_0021
} // end .try
finally
{
IL_0011: ldloc.0
IL_0012: ldnull
IL_0013: ceq
IL_0015: stloc.1
IL_0016: ldloc.1
IL_0017: brtrue.s IL_0020
IL_0019: ldloc.0
IL_001a: callvirt instance void [mscorlib]System.IDisposable::Dispose()
IL_001f: nop
IL_0020: endfinally
} // end handler
IL_0021: nop
IL_0022: ret
} // end of method Program::Main

如您所见,它仍在调用 Dispose 方法。它在 try block 之前创建 FileStream 实例,然后调用 finally中的Dispose方法。我认为这是using语句的另一个优点。

关于c# - "Using{}"是处置对象的好习惯,即使没有引用它的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21920206/

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