2011-09-29 99 views
1

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

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 
+0

这将是很好,如果任何人都可以添加一些简单的例子作为这个问题的新答案,即使这个问题有一个接受的答案。我想了解更多关于VB中泛型的知识,但是我没有很好的实用和简单的例子说明何时以及为什么我会使用它。螺丝刀的例子很好,只是开始了解它,但它并没有把我所有的方式。谢谢.. – Stefan

+0

第二个例子是一个强类型集合,它为什么值得引用,这是泛型倾向于被使用的一个更常见的原因。也就是说,开发人员可以编写一个List实现,而不是专门为字符串编写一个List实现,而编写一个List实现,其中可以将被保持的对象的类型指定为通用类型参数*和*编译器可以在编译时强制执行类型安全这样只有正确类型的对象才会添加到集合中。 – lzcd

回答

4

http://msdn.microsoft.com/en-us/library/w256ka79(v=vs.80).aspx 可以发现泛型的描述(其是用于第一组括号的原因)。

它开始:

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

一个比喻是一个螺丝刀头设置可移动。您检查需要转动的 螺钉,并为该螺钉选择正确的头部 (开槽,交叉,加星号)。一旦将正确的头插入 螺丝刀手柄中,即可执行与 螺丝刀完全相同的功能,即转动螺丝。

螺丝刀设置为一个通用的工具

当你定义一个泛型类型,你与一个或多个 数据类型的参数吧。这使得使用代码可以将数据类型定制为其要求的 。您的代码可以从通用元素中声明几个不同的编程元素 ,每个元素都在数据类型的不同集合 上执行操作。但是所声明的元素都执行相同的逻辑,不管他们使用什么数据类型。

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

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

您现在可以使用stringQ与字符串值完全正常工作。 由于stringQ特定于字符串,而不是针对对象值的一般化 ,因此您没有迟到绑定或类型转换。 这节省了执行时间并减少了运行时错误。

+0

+1帮助我 – user774411

+1

BoltClock:请求是“你能指向我在哪里我可以阅读更多关于它?”......因此提供了一个简单的旧链接。 – lzcd

+1

是的,但至少你可以给链接一个标题,这样人们就知道它有什么样的页面。 – BoltClock

4

VB。NET使用括号中几种不同的方式:方法声明或方法调用(同C#)

    • 参数部声明generics(的<等效>在C#)
    • 声明和索引arrays(相当于[] in C#)
  • 相关问题