当IDisposable不可用时,可以使用With / End With(V​​B.NET)吗?

时间:2011-02-06 22:00:10

标签: vb.net using-statement with-statement

如果由于Using未实施而无法使用IDisposable,以下代码是With / End With的正常做法吗?这会导致内存泄漏还是更好的设置实例变量然后将其设置为空?

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

3 个答案:

答案 0 :(得分:3)

With关键字 nothing 与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,否则你没有任何使用。 避免假设With负责处理With语句中使用的对象引用。它没有。有意义的是,它会在15年左右的时间里阻止VB.NET团队如此戏剧性地改变它的行为。输入更少的代码绝不仅仅是一个捷径。在“为什么没有C#有关键字”这个问题上有很多特色。 C#早期的热土豆,但现在已经有一段时间了。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

With

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