0

在由于未实现Using而无法使用的情况下,以下代码是否可以用于/ ?这会导致内存泄漏还是设置一个实例变量然后将其设置为空会更好?IDisposableWithEnd With

With New System.IO.FileInfo(sFileName)
   ' Do some work
End With
4

3 回答 3

3

With 关键字与 IDisposable 或 Using 关键字无关。这只是一个方便的捷径,可以避免输入对象引用的名称。

    With New System.IO.FileInfo(sfilename)
        Console.WriteLine(.Length)    '' note the dot without an object reference
        '' etc..
    End With

这与以下内容相同:

    Dim info = New System.IO.FileInfo(sfilename)
    Console.WriteLine(info.Length)
    '' etc..

由于 FileInfo 没有实现 IDisposable,否则您对 Using 没有任何用处。 避免假设 With 负责处理 With 语句中使用的对象引用。它没有。确实有点道理,但是它存在 15 年以上的时间阻止了 VB.NET 团队如此显着地改变其行为。输入更少的代码只是一个捷径。在过去的“为什么 C# 没有 with 关键字”问题中非常重要。C# 早期的烫手山芋,但现在已经有一段时间了。

于 2011-02-06T22:05:37.000 回答
2

With与内存或资源使用无关。这只是一个简写符号。

于 2011-02-06T22:04:39.350 回答
0
With

不仅仅是简写符号。如果根据 MSDN 在对象上设置大量属性可以稍微提高性能,“如果对象的限定路径很长,使用 With...End With 可以提高性能。” (请参阅http://msdn.microsoft.com/en-us/library/wc500chb.aspx上的备注)这样做的原因是 with 块只需获取一次对象引用,然后它会重用它每个后续调用的对象引用。如果每次运行时都必须多次获取对象引用时显式列出对象。这不是一个很大的区别,但在某些情况下它可能很重要。

于 2011-02-06T22:25:51.760 回答