VB.NET中静态局部变量对一次性对象来说是否不适用?

2026-05-06 12:241阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计436个文字,预计阅读时间需要2分钟。

VB.NET中静态局部变量对一次性对象来说是否不适用?

本地 Static 变量是否适用于一次性物品?这种情况下,主要问题在于 Dispose() 方法可能永远不会被调用。例如:Sub DrawText(text As String, fontFamily As Font) Static cachedFont As Font=Nothing If cachedFont Is Nothing

本地 Static变量是否适用于一次性物品?这种情况的主要问题是:Dispose()可能永远不会被调用.

例:

Sub DrawText(text As String, fontFamily As Font) Static cachedFont As Font = Nothing If cachedFont Is Nothing OrElse fontFamily <> cachedFont.Family Then cachedFont = New Font(fontFamily) EndIf 'now draw text using cachedFont End Sub

是这种情况,是将本地静态变量转换为本地类变量(在Sub Dispose中处置(处理为布尔))的唯一方法吗?

是的,如果你想让它们被处理,它们是不可行的.

静态局部变量被编译为

>在共享过程中:

>到类级别的共享字段变量

>在非共享实例方法中:

VB.NET中静态局部变量对一次性对象来说是否不适用?

>在类级别实例化字段变量

…从方法名称和变量名称派生的名称,以确保每种类型的唯一名称.

共享变量永远不会在应用程序的生命周期中处理,因为您只能处置实例.调用instance.Dispose或使用Using语句时会释放实例变量.

但CLR中的垃圾收集器不会(也不能)处理非托管对象.所以问题是你不能从Dispose中处理这些对象,因为它超出了作为局部变量的范围.因此,如果您需要清理Dispose中的非托管资源,则无法使用静态局部变量执行此操作,因为您无法访问它们.

值得阅读:

> Object Lifetime: How Objects Are Created and Destroyed (Visual Basic)
> Static (Visual Basic)

本文共计436个文字,预计阅读时间需要2分钟。

VB.NET中静态局部变量对一次性对象来说是否不适用?

本地 Static 变量是否适用于一次性物品?这种情况下,主要问题在于 Dispose() 方法可能永远不会被调用。例如:Sub DrawText(text As String, fontFamily As Font) Static cachedFont As Font=Nothing If cachedFont Is Nothing

本地 Static变量是否适用于一次性物品?这种情况的主要问题是:Dispose()可能永远不会被调用.

例:

Sub DrawText(text As String, fontFamily As Font) Static cachedFont As Font = Nothing If cachedFont Is Nothing OrElse fontFamily <> cachedFont.Family Then cachedFont = New Font(fontFamily) EndIf 'now draw text using cachedFont End Sub

是这种情况,是将本地静态变量转换为本地类变量(在Sub Dispose中处置(处理为布尔))的唯一方法吗?

是的,如果你想让它们被处理,它们是不可行的.

静态局部变量被编译为

>在共享过程中:

>到类级别的共享字段变量

>在非共享实例方法中:

VB.NET中静态局部变量对一次性对象来说是否不适用?

>在类级别实例化字段变量

…从方法名称和变量名称派生的名称,以确保每种类型的唯一名称.

共享变量永远不会在应用程序的生命周期中处理,因为您只能处置实例.调用instance.Dispose或使用Using语句时会释放实例变量.

但CLR中的垃圾收集器不会(也不能)处理非托管对象.所以问题是你不能从Dispose中处理这些对象,因为它超出了作为局部变量的范围.因此,如果您需要清理Dispose中的非托管资源,则无法使用静态局部变量执行此操作,因为您无法访问它们.

值得阅读:

> Object Lifetime: How Objects Are Created and Destroyed (Visual Basic)
> Static (Visual Basic)