0

我在这里看到了一个问题,他们实现了一个通用的 dispose 方法,该方法采用任何 IDisposable 对象并对其调用 dispose 。我想让它可以采用可变数量的参数。但是,我确实想在编译时将 args 限制为 IDisposable。(这是因为我组织中的某些人最终会在非 IDisposable 对象上调用此方法“只是为了安全”和“它不会造成伤害”)

我已经像这样在VB中实现了相同的功能。我怎样才能让它需要多个参数。请注意,我确实希望它们通过引用传递,因为我将变量设置为空。

Public Sub DisposeObject(Of TDisposable As IDisposable)(ByRef disposableObject As TDisposable)
    If disposableObject IsNot Nothing Then
        disposableObject.Dispose()
        disposableObject = Nothing
    End If
End Sub
4

4 回答 4

1

在 VB 中,您可以使用数组参数上的 ParamArray 修饰符获得具有可变数量参数的方法。

但是请注意,ParamArray 参数必须声明为 ByVal,并且对数组的更改对调用代码没有影响。所以你不能同时拥有可变数量的参数和 ByRef 语义。

于 2010-08-31T12:05:51.917 回答
0

Donno VB 但在 C# 中你可以写:

public void DisposeObjects(params IDisposable[] args)
{
  foreach(IDisposable obj in args)
  {
     if(obj != null)
     {
        obj.Dispose();
     }
  }
}
于 2010-08-31T12:11:04.090 回答
0

这是您的操作方法:

Public Sub DisposeObject(ByVal ParamArray disposableObjects() As IDisposable)
    For Each obj As IDisposable In disposableObjects
        If Not IsNothing(obj) Then obj.Dispose()
    Next
End Sub

但我不推荐这样的解决方案。使用“使用”语句要好得多。

在c#中

using (var obj = new TypeImlementingIdisposable)
{
   //do stuff with the object here
}

在VB中:

Using obj As New TypeImlementingIdisposable
   ' do stuff with the object here
End Using

这确保了对象总是被释放,不管是否抛出异常。

您可以在msdn上阅读更多内容

于 2010-08-31T12:41:21.630 回答
0
Public Sub DisposeObjects(Of T As IDisposable)(ByRef disposableObject As T)
    Dim disposable As IDisposable = CType(disposableObject, T)
    disposableObject = CType(Nothing, T)
    If (disposable IsNot Nothing) Then
        disposable.Dispose()
    End If
End Sub

用法:

Dim any as Foo = New Foo

DisposeObjects(CType(any, Foo))

于 2014-05-25T12:42:41.047 回答