23
2018
04

上网管理软件调用Add方法

初始化List和Dictionary时,会在新建的实例上调用Add方法。添加自己的对象类型时,可以使用类似的紧凑语法:创建一个扩展方法Add,把一系列输入值转换为类的一个实例。

08
2018
04

上网管理软件属性生命初始值

隐式的续行符更便于在VB中编写LINQ表达式,因为可以把表达式放在多个代码行上,而无需添加续行符。

定义类时,最好使用封装原则,隐藏或封装类的功能。如果需要修改实现代码,这么做将不会影响使用该类的其他代码。另外,在希望使用字段时,推荐通过属性来使用它。属性可以是简单的提取器/设置器,也可以包含其他功能,例如,可以在属性值变化时引发一个事件。但如果需要声明所有的属性和底层字段,这种方法会导致大量重复的代码。尽管使用Visual Studio片段能较为方便地完成这个任务,但仍会导致过度冗长的代码。

02
2018
04

电脑行为管理软件隐藏式的续行符

隐藏式的续行符:只要可能,VB编译器就会推断续行符。例如,现在可以编写如下没有续行符的代码:

第二行说明,可以创建一个没有返回类型的匿名方法,在VB中也称Sub。这两行代码都返回一个委托。提供参数,就可以调用该委托,如果后面的两行代码所示。最后一行代码说明如何把匿名方法定义为方法调用的一部分。注意,这里试用了缩写形式,因为Sub是一行代码。如果方法有多行代码,就需要使用完整形式,其中包含End Sub或End Function,这取决于方法是否有返回值。

26
2018
03

上网管理软件表达式和匿名方法

Visual Basic(VB)的这个版本包含许多其他功能,使VB与C#更接近功能等价这个目标。它还包含两个语言专用的功能,更便于开发人员初始化集合和数组。

Λ表达式和匿名方法:VB以前版本的一个重要的确定是缺乏对λ表达式和匿名方法的完整支持。匿名方法是定义时没有名称的方法,λ表达式是一种特殊的表达式,该表达式可以用于生成委托(与大多数匿名方法一样)或是表达式树。在VB中,现在可以声明一个或多个匿名方法。

19
2018
03

电脑行为管理软件逆变类型参数

在这个例子中,为什么在Animal的IAnimalAction和Tortoise的IAnimalAction之间转换是安全的?以为编译器会强制,所以逆变类型参数T只能用作输入参数。因为Tortoise总是可以转换为Animal,所以把Tortoise传送给希望输入参数是Animal的方法总是安全的。

Public Sub DoAnotherAnimalAction(ByValaction As IAnimalAction(Of Tortoise))

12
2018
03

上网管理软件逆变接口或委托

可以使用in关键字建立自己的逆变接口或委托。在Animal示例中,可以定义一个DoAnotherAnimalAction方法,它接收Tortoise的IAnimalAction作为参数。但实际上MainForm实现了Animal的IAnimalAction。

C#

05
2018
03

电脑行为管理软件逆变参数

在这段代码中,转换是安全的,因为CreateAnimal方法不接受任何类型化参数(即参数要转换的类型)。相反,类型参数定义了返回(或out)值的类型,在T上进行了接口协变。

逆变:有时还希望加宽类型参数,这称为逆变,由IComparer接口使用。可以想象,Animal的IComparer也是Lion的IComparer,因为如果可以比较任何动物,就可以比较Lion。这个转换是允许的,因为IComparer接口已更新为使用in关键字。

26
2018
02

上网管理软件协变体

以这种方式在泛型类型之间转换的功能称为泛型变体。在一些情况下,希望能缩窄类型变量,如前面的例子所示,有时则希望加宽类型变量,这些称为协变和逆变。

协变:在前面的例子中,Tortoise的IEnumerable可以转换为Animal的IEnumerable。这称为协变,是允许的,因为T接口的IEnumerable已更新为包含out关键字:

05
2018
02

电脑行为管理软件泛型类型列表转换

这段代码尝试把Tortoise列表转换为Animal列表。如果允许这么做,就可以把Lion添加到列表中,因为它也继承了Animal。这会使最后一个语句不一致,因为Tortoise列表不再只包含Tortoise。

这演示了不能在泛型类型之间进行转换,但在一些情况下允许转换类型。例如,下面的代码段把Tortoise列表转换为Animal的IEnumerable。因为IEnumerable接口不允许修改集合,所以这是一个安全、允许进行的转换。

29
2018
01

上网管理软件泛型变体

泛型变体:泛型的一个看起来会混淆的方面是缺乏继承功能。例如,如下继承链:Tortoise继承了Animal,Animal继承了Object。假定有一个Tortoise列表,即C#中的List<Tortoise>或VB中的List(of Tortoise),希望把它转换回Animal列表。下面的代码说明了不能这样转换的原因。