繁体   English   中英

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

[英]Why there are 2 () in a sub signature?

最近我问了一个问题并得到了有效的答案。 下面的代码是工作代码。 我在理解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

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

开始:

通用类型是单个编程元素,适用于对各种数据类型执行相同的功能。 定义通用类或过程时,不必为可能要执行该功能的每种数据类型定义单独的版本。

一个类比是带有可移动头的螺丝刀。 您检查需要转动的螺钉,并为该螺钉选择正确的头部(开槽,划线,加星号)。 将正确的头插入螺丝起子手柄后,即可使用螺丝起子执行完全相同的功能,即旋转螺丝。

螺丝刀设置为通用工具

定义通用类型时,可以使用一种或多种数据类型对其进行参数化。 这允许使用代码根据其要求定制数据类型。 您的代码可以从通用元素声明几个不同的编程元素,每个元素都作用于一组不同的数据类型。 但是,无论它们使用的是哪种数据类型,声明的元素都执行相同的逻辑。

例如,您可能想创建和使用对特定数据类型(例如String)进行操作的队列类。 您可以从System.Collections.Generic.Queue声明这样的类,如以下示例所示。

VB公共stringQ作为新的System.Collections.Generic.Queue(字符串)

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

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

  • 方法声明或方法调用的参数部分(与C#相同)
  • 声明泛型 (相当于C#中的<>)
  • 声明和索引数组 (相当于C#中的[])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM