为什么子签名中有2()?

时间:2011-09-29 04:53:06

标签: .net vb.net

最近我问了一个问题并得到了一个有效的答案。下面的代码是工作代码。我有问题了解Sub签名。为什么sub有两个()()。我的意思是我不理解第一个(Of Algorithm As SymmetricAlgorithm)。显然,第二个是参数。你能指点我在哪里可以阅读更多关于它的内容吗?

Public Shared Sub DecryptTo(Of Algorithm As SymmetricAlgorithm)(sourceStream As Stream, stream As Stream, password As String)
    Dim pdb = GetPassword(password)
    Using alg = Activator.CreateInstance(Of Algorithm)()
        Using trans = alg.CreateDecryptor(pdb.GetBytes(alg.KeySize / 8), pdb.GetBytes(16))
            Using cStream = New CryptoStream(sourceStream, trans, CryptoStreamMode.Read)
                cStream.CopyTo(stream)
            End Using
        End Using
    End Using
End Sub

2 个答案:

答案 0 :(得分:4)

http://msdn.microsoft.com/en-us/library/w256ka79(v=vs.80).aspx 人们可以找到泛型的描述(这是第一组括号的原因)。

它开始了:

  

泛型类型是适合执行的单个编程元素   各种数据类型的相同功能。当你定义一个   通用类或过程,您不必定义单独的   您可能希望执行该操作的每种数据类型的版本   功能。

     

类比是带有可拆卸头的螺丝刀。你检查一下   螺丝你需要转动并选择正确的螺丝头   (开槽,划线,加星标)。一旦你插入正确的头   螺丝刀手柄,你执行完全相同的功能   螺丝刀,即转动螺丝。

     

螺丝刀设置为通用工具

     

定义泛型类型时,可以使用一个或多个参数化它   数据类型。这允许使用代码来定制数据类型   要求。您的代码可以声明几种不同的编程   来自通用元素的元素,每个元素作用于不同的集合   数据类型。但声明的元素都表现相同   逻辑,无论他们使用什么数据类型。

     

例如,您可能希望创建并使用该队列类   对特定数据类型(如String)进行操作。你可以声明这样的   System.Collections.Generic.Queue中的一个类,如下所示   示例显示。

     

VB Public stringQ As New System.Collections.Generic.Queue(Of String)

     

现在可以使用stringQ专门使用String值。   因为stringQ特定于String而不是一般化   对于Object值,您没有后期绑定或类型转换。   这样可以节省执行时间并减少运行时错误。

答案 1 :(得分:4)

VB.NET以几种不同的方式使用括号:

  • 方法声明或方法调用的参数部分(与C#相同)
  • 声明generics(相当于C#中的<>)
  • 声明并编制索引arrays(相当于C#中的[])