信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索
查看: 3381|回复: 10
打印 上一主题 下一主题

[『VB.NET 图文教程』] 在VB.NET编程中使用数组让您编程有一个质的速度

[复制链接]

1780

主题

1785

帖子

1万

积分

积分
10333
跳转到指定楼层
宣传软件楼主
发表于 2017-5-16 13:10:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

软件教程首图:

软件教程分类:VB.NET 图文教程 

软件图文教程视频教程分类:软件图文教程 

软件教程难易程度:软件高级教程 

软件教程发布日期:2017-05-16

软件教程关键字:在VB.NET数组

① 本信息收集于网络,如有不对的地方欢迎联系我纠正!
② 本信息免费收录,不存在价格的问题!
③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!

④友情链接关键字:软件定制网站 网址:http://www.postbbs.com

软件教程详细描述
本帖最后由 群发软件 于 2017-5-16 13:13 编辑

 数组是程序中经常要使用到的一种数据类型,Visual Basic.Net中的数组,虽然语法结构等方面保留了和Visual Basic的很多相似之处,但也与Visual Basic存在着很多区别。其最大,也是各位Visual Basic程序员所最不能容忍的区别就是如下二点:

  1. 在Visual Basic .Net中申明一个数组,其数组元素中的索引值的起点全部都为“0”,而不是以前Visual Basic中的索引值起点一般都为“1”。这种定义方法和Visual Basic .Net的孪生姐妹Visual C#非常相似。

  2. 由于在Visual Basic .Net中数组都有了统一的起点,所以在Visual Basic .Net中定义一个数组,也就不再需要关键字“To”来设定数组的范围。这样在Visual Basic .Net中申明一个数组将会比Visual Basic中要稍微简洁一点。关于数组定义将在后面详细介绍。

  一.本节主要内容:

  在接下来内容中,将结合具体示例来详细的介绍下列知识点:

  1. 申明数组,其中包括一维数组、多维数组,也包括静态数组和动态数组,及其初始化。和访问数组中的元素。

  2. 重新申明数组,即ReDim语句的使用用法,及其Preserve关键字的作用。

  3. 使用For Each …. Next语句来遍历数组中各个元素,For Each …. Next语句是操作数据最为常用的一种语句,它能够方便的访问到数组中的每一个元素。

  4. 申明参数为数组的过程或者函数,由于数组是引用类型,所以在申明参数为数组的函数或过程时,处理方法与参数为值类型的函数或过程有点不一样。

  5. 简要介绍Array类和其主要的常用,以及通过Array类操作数组的具体方法。

  在Visual Basic.Net申明一个数组使用的依然是Dim语句,其申明数组和Visual Basic的主要区别在上面内容中已经简单说过了。下面在Visual Basic .Net申明一个长度为“3”的字符串数组,并对之进行初始化的代码:

  Dim arrString ( 2 ) As String = {"星期一","星期二","星期三"}

  下面代码是申请一个2×2的二维字符串数组,并对之进行初始化:

  Dim arrDate ( 1, 1 ) As String = {{"星期一", "18号"}, {"星期二", "19号"}}

  静态数组和动态数组的区别就在于静态数组的长度是固定的,而动态数组的长度是不固定的。上面的申明的二个数组就是静态数组,而下面二段代码的作用就是分别申明一个一维数组和二维数组,并对它们进行初始化:

  Dim arrString ( ) As String = {"星期一","星期二","星期三"}

  '申明一个动态的一维数组,并初始化

  Dim arrDate ( , ) As String = {{"星期一", "18号"}, {"星期二", "19号"}}

  '申明一个动态的二维数组,并初始化

  对其他数据类型和更多维数的数组,其申明和初始化方法和上面的基本差不多,只需根据数组的维数和数据类型的不同进行相应的修改就可以了。

  当数组申明和初始化以后,就可以通过元素在数组中对应的索引值来访问,下面二段代码分别是访问上面申明并初始化的一维数组和二维数组中的一个元素:

  Dim sTemp1 As String = arrString ( 1 )

  '访问arrString数组中的第2个元素

  Dim sTemp2 As String = arrDate ( 1 , 1 )

  '访问arrDate数组中的第二行、第二列元素

  三.重新申明数组:

  在Visual Basic .Net重新申明数组和Visual Basic中基本类似,依然使用的是ReDim语句。在Visual Basic .Net中使用ReDim语句要注意以下三点:

  1. ReDim语句仅可以在过程级出现。这意味着不可以在类或模块级代码区使用ReDim语句来重新申明数组。

  2. ReDim语句只是更改已被正式声明的数组的一个或多个维度的大小,但不能更改该数组的维数。

  3. ReDim语句无法更改数组中元素的数据类型,和Dim语句申明数组的区别在于无法在ReDim语句中初始化重新申明的数组。

  在使用ReDim重新申明数组时,最为常见的关键字就是“Preserve”。“Preserve”的作用是表明在重新申明数组时,是否要在重新申明的数组中复制原数组中的元素。请比较下面二段代码:

  代码一:

  Dim arrString ( 2 ) As String = {"星期一","星期二","星期三"}

  ReDim Preserve arrString ( 4 )

  '重新申明arrString数组,数组的长度改为5,并且在新数组中复制原数组的元素

  arrString ( 3 ) = "星期四"

  arrString ( 4 ) = "星期五"

  代码二:

  Dim arrString ( 2 ) As String = {"星期一","星期二","星期三"}

  ReDim arrString ( 4 )

  '重新申明arrString数组,数组的长度改为5,并不往新数组中复制原数组的元素

  arrString ( 0 ) = "星期一"

  arrString ( 1 ) = "星期二"

  arrString ( 2 ) = "星期三"

  arrString ( 3 ) = "星期四"

  arrString ( 4 ) = "星期五"

  通过比较上述二段代码,可见,在第一段代码中由于ReDim中使用了Preserve关键字,所以在重新申明数组时,就在新数组中复制了原数组的元素,这样就只需要对其中的二个元素进行初始化;而第二段由于没有使用Preserve关键字,就没有在新数组中带入原数组中的任何元素,所以对数组的所有元素都进行初始化。通过比较相信您对重新定义数组和“Preserve”关键字的使用有了更深的理解。

  用Photoshop给漂亮的烫发MM抠图

  Photoshop透明婚纱抠图大法

  Photoshop:让MM做个“变色龙”

  用Photoshop来制作一款精美的宝宝照片墙

  Photoshop绝色美女通道抠图法

  用Photoshop教你打造绚丽光芒效果

  For Each …. Next语句好像只是为二种数据类型专门度身定做的,其一就是集合,另外一个就是数组了。通过For Each …. Next语句,可以十分方便的访问数组中的任一元素。请仔细分析一下下列代码:

  Dim arrString ( 2 ) As String = {"星期一","星期二","星期三"}

  Dim Temp As String

  For Each Temp In arrString

  If Temp = "星期三" Then

  MsgBox ( "在数组中寻找到""星期三""字符串")

  Exit For

  '退出For Each …. Next语句

  End If

  Next

  上面代码的功能是通过For Each …. Next语句访问arrString数组中各元素,如果发现有元素为字符串“星期三”,则弹出提示框,并退出循环。

  同样用For … Next语句也能够实现上面同样的功能,只是感觉有点不专业,并且有点繁琐,下面代码是用For … Next语句实现上面For Each …. Next语句同等功能的代码:

  Dim i As Integer

  For i = 0 To myString.Length - 1

  If arrString ( i ) = "星期三" Then

  MsgBox ( "在数组中寻找到""星期三""字符串" )

  Exit For

  End If

  Next

  五.申明参数为数组的过程或者函数:

  由于数组为引用类型,所以如果以数组为参数过程和函数在定义时候就要多加以注意,下面代码是在Visual Basic.Net申明一个参数为数组的过程的典型代码,可见在调用数组类型之前多了一个关键字“ByVal”,“ByVal”关键字的作用在于在下面调用的过程中的不能更改数组的数值:

  Sub DisplayArray ( ByVal myString ( ) As String )

  End Sub

  六.简要介绍System.Array类及其成员:

  Array类是一个基类,是公共语言运行库中所有数组的基类。它提供了创建、操作、搜索和排序数组的方法。数组中任一个元素就是Array中的一个值。Array的长度是它可包含的元素总数。Array的秩是Array中的维数。Array中维度的下限是Array 中该维度的起始索引,多维Array的各个维度可以有不同的界限。表01和表02分别是Array类的常用属性和常用方法及其说明:


属性 说明
IsFixedSize 获取指示Array是否具有固定大小的值。
IsReadOnly 获取指示Array是否为只读的值。
Length 获取Array的所有维度中的元素总数。
Rank 获取Array的秩(也就是维数)。

表01:System.Array类的常用属性及其说明


方法 说明
BinarySearch 使用二进制搜索算法在一维的排序Array中搜索值。
Clear 将Array中的一系列元素设置为零、false或空引用(即:Nothing),具体操作时设定值取决于元素类型。
Copy 将一个Array的一部分复制到另一个Array中,并根据需要执行强制类型转换和装箱。
CopyTo 将当前一维Array的所有元素复制到指定的一维Array中(从指定的目标Array索引开始)。
GetLength 获取Array的指定维度中的元素数。
GetLowerBound 获取Array中指定维度的下限。
GetUpperBound 获取Array的指定维度的上限。
GetValue 获取当前Array中指定元素的值。
LastIndexOf 返回一维Array或部分Array中某个值的最后一个匹配项的索引。
Reverse 反转一维Array或部分Array中元素的顺序。
SetValue 将当前Array中的指定元素设置为指定值。
Sort 对一维Array对象中的元素进行排序。


  表02:System.Array类的常用方法及其说明

  下面介绍的示例的功能包含了数组的申明、初始化、重新申明、重新初始化、数组中各元素的排序、数组的遍历、查找以及以数组为参数的过程的定义及调用方法等。下面是此示例实现的具体步骤:

  1. 启动Visual Studio .Net。

  2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3. 将【项目类型】设置为【Visual Basic项目】。

  4. 将【模板】设置为【Windows应用程序】。

  5. 在【名称】文本框中输入【数组】。

  6. 在【位置】的文本框中输入【E:VS.NET项目】,然后单击【确定】按钮,这样在“E:VS.NET项目”目录中就产生了名称为“数组”的文件夹,并在里面创建了名称为【数组】的项目文件。

  7. 把Visual Studio .Net的当前窗口切换到【Form1.vb(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应操作:

  四个Button组件,分别用来创建一个“创建一维数组”、创建“创建二维数组”、实现对“对一维数组排序”和实现“重定义一维数组”。并在这四个Button组件拖入Form1的设计窗体后,分别双击这四个组件,这样系统会在Form1.vb文件分别产生这四个组件的Click时间对应的处理代码。

  一个ListBox组件,用来显示创建的一维数组的内容。

  8. 按照表03中数值来设定设定组件的主要属性:


组件类型 组件名称 属性 设置结果
Form Form1 Text 数组篇
Form1 MaximizeBox False
Form1 MinimizeBox False
Form1 FormBorderStyle FixedSingle
ListBox ListBox1 ItemHeight 12
ListBox1 Location Point ( 28 , 169 )
ListBox1 Size Size ( 246 , 136 )
Button Button1 Text 创建一维数组
Button1 FlatStyle Flat
Button2 Text 创建二维数组
Button2 FlatStyle Flat
Button3 Text 对一维数组排序
Button3 FlatStyle Flat
Button4 Text 重定义一维数组
Button4 FlatStyle Flat


  【数组】项目窗体中各组件的主要属性设定数值表



  并按照图01中各组件的位置、大小和排列方式来调整窗体中各个组件:

在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件

图01:【数组】项目的设计界面

  9. 把Visual Studio .Net的当前窗口切换到【Form1.vb】,进入Form1.vb文件的编辑界面。然后用下列的代码替换Form1.vb中Button1组件的Click事件对应的处理代码,下列代码的功能是通过创建输入对话框来创建一个一维数组:

  Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click

  Dim i As Integer

  For i = 0 To 3

  arrString ( i ) = InputBox ( "请在下面文本框中输入字符串" , "请输入字符串 , 来初始化创建的一维数组!" , "Item " &i )

  Next

  Button3.Enabled = True

  Button4.Enabled = True

  DisplayArray ( arrString )

  End Sub

  10. 用下列的代码替换Form1.vb中Button2组件的Click事件对应的处理代码,下列代码的功能是创建一个二维数组,并进行初始化:

  Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.Click

  Dim arrDate ( , ) As String = {{"星期一" , "18号"} , {"星期二" , "19号"}}

  '创建一个二维数组,并初始化

  MsgBox ( arrDate ( 0 , 1 ) )

  '访问这个二维数组中的元素

  End Sub

  11. 用下列的代码替换Form1.vb中Button3组件的Click事件对应的处理代码,下列代码的功能是首先定义一个名称为“DisplayArray”的过程,此过程能够对给定的一维数组中的数据进行排序,并通过ListBox显示出来。其次是定义Button3的Click事件,在此事件中对调用DisplayArray过程,对一维数组中的数据进行排序:

  '定义一个过程,过程的功能是通过ListBox组件显示给定的字符串数组中各元素

  Sub DisplayArray ( ByVal myString ( ) As String )

  ListBox1.Items.Clear ( )

  Dim Temp As String

  For Each Temp In myString

  ListBox1.Items.Add ( Temp )

  Next

  End Sub

  Private Sub Button3_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button3.Click

  Array.Sort ( arrString )

  DisplayArray ( arrString )

  End Sub

12. 用下列的代码替换Form1.vb中Button4组件的Click事件对应的处理代码,下列代码的功能是重新定义一维数组:

  Private Sub Button4_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button4.Click

  ReDim Preserve arrString ( 5 )

  '请注意Preserve关键字的作用

  Dim i As Integer

  For i = 4 To 5

  arrString ( i ) = InputBox ( "请在下面文本框中输入字符串" , "请输入字符串 , 来初始化重新创建的一维数组!" , "Item " &i )

  Next

  DisplayArray ( arrString )

  End Sub

  13. 保存上面的所有修改,至此【数组】项目的全部工作就完成了。此时单击快捷键F5运行程序,图02、图03是程序编译后的运行界面:

在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件

图02:输入字符串来初始化一维数组的界面

在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件

图03:对一维数组中的各元素进行排序后的界面

  八.总结:

  本文首先介绍了Visual Basic .Net中的数组和原先版本的Visual Basic中的区别,在Visual Basic .Net中数组从内涵上更像Visual C#。其次介绍了数组的申明方法,其中包括一维数组、多维数组,也包括静态数组和动态数组,初始化数组,及其访问数组中的元素。接着介绍了重新申明数组方法,即ReDim语句的使用用法,及其Preserve关键字的作用。以及使用For Each …. Next语句来遍历数组中各个元素,For Each …. Next语句是操作数据最为常用的一种语句,它能够方便的访问到数组中的每一个元素。比用For ……Next语句要方便了许多。最后介绍在以数组为参数的过程和函数的调用方法,和Array类和其主要的使用方法。之所以提出来介绍以数组为参数的过程和函数的调用方法,是因为数组是引用类型,所以在申明参数为数组的函数或过程时,处理方法与参数为值类型的函数或过程有点不一样。Array是.Net FrameWorkSDK中提供用来操作数组的类,本文主要是介绍利用Array类操作数组的具体方方法法。以上就是本文的主要内容,相信仔细阅读并进行相应练习的读者一定已经掌握了。


我们都知道在所有程序设计语言中数组都是一个非常重要的概念,数组的作用是允许程序员用同一个名称来引用多个变量,因此采用数组索引来区分这些变量。很多情况下利用数组索引来设置一个循环,这样就可以高效地处理复杂的情况,因此在很多情况下,使用数组可以缩短或者简化程序的代码。本文主要介绍VB.NET数组的使用,希望对大家的使用带来帮助。


数组中的第一个元素的下标称为下界,最后一个元素的下标称为上界,其余的元素连续地分布在上下界之间,并且数组在内存中也是用连续的区域来存储的,所以要求声明数组每维的长度不能超过Long数据类型的最大值,即264—1=263。

我们把VB.NET数组当作一个对象来处理,这就意味着数组类型是单个引用类型,数组变量包含指向构成数组元素、数组维和数组长度等数据的指针,数组之间互相赋值其实只是在相互复制指针,而且数组继承了System名字空间的Array类。

VB.NET中提供的数组类型和VB 6.0中有一些差别,我们将在下面做详细的讲解。

(1)VB.NET数组的声明

VB.NET中的数组有两种类型:定长数组和动态数组。这里先介绍定长数组的几种不同的声明方式,不同的声明方法将导致数组不同的有效范围。

◆Dim语句在模块段建立模块级数组,例如:

  • Dim arrayl(3)As Integer

◆Public语句在模块的声明部分建立一个公共数组,例如:

  • Public counttype(20)as string

◆Static语句声明一个过程内的局部数组,例如:

  • Public Sub Ipaddress()
  • Static server(30)as string
  • End Sub

VB.NET还提供了新的数组初始化语法,只需要简单的语句就可以完成数组的声明和初始化,例如:

  • New array initialization syntax
  • Dim arrayl As Integer()={2,4,8}

在VB.NET中,为了和其他语言更加易于协同操作,数组的下标均设定为0,不允许声明一个下界为1的数组,因此Option Base语句不再被VB.NET支持,而且在声明一个数组时必须用它的元素个数,而不是它的上界来初始化,例如:

  • //声明一个一维数组具有3个元素,下标从0~2
  • Dim arrayl(3)As Integer
  • arrayl(0):2
  • arrayl(1)=4
  • arrayl(2)=8

以上声明的数组有三个元素,下标从0到2,如果代码企图访问下标为3的数组元素,将引起运行错误。

(2)二维数组及多维数组

除了较为简单的一维数组外,VB.NET还支持多维数组,其声明方法和一维数组没有太大的区别,例如:

  • StatiC multidim(10,10)as double
  • Public Singledim(5,8,10,3)as single

以上语句声明了一个lO行,10列的二维数组。在VB.NET中,数组最多有32维,而且每一维的长度都不能够超过Long数组类型的最大值。数组总尺寸的限制是不一样的,这与所采用的操作系统以及计算机中使用的内存量有关。数组的维数将保留在System.Array.Rank属性中,每维的长度可以由System.Array.GetLengfll方法来得到。需要提醒注意的是,由于VB.NET中数组是以0为基的,如果返回来的值为9,则表示数组是10维的。当为数组继续添加维数的时候,使其扩展为多位数组,此时会使数组所需的存储空间大幅度增加,所以在使用多维数组时对这个方面也要多加考虑。

另外VB.NET还提供了Lbound()和Lbound()两个函数来返回数组的上、下界。中国自学编程网整理发布 ,www.zxbc.cn对于一维数组而言,只需要一个参数,那便是数组名。例如:

  • one==Ubound(arrayl)

对于多位数组,也只是简单地将逗号后面的第二个参数指定为数组的第几维。例如:

  • tw0=Lbound(multidim,7)

如果没有指明是哪一维,系统默认为第一维。

(3)动态数组

有时在程序运行之前无法确认数组的大小,VB.NET提供了在程序运行时动态决定数组大小的功能,即动态数组。它具有灵活多变的特点,可以在任何时候根据需要随时改变数组的大小,有助于内存的管理。建立一个动态数组的详细步骤如下:

①和声明一般数组一样,可以使用前面介绍的几种声明,只是赋一个空维数组,这样就将数组声明为动态数组。典型的声明语句为:

  • Dim types(  )  As integer

②然后使用ReDim语句来配置数组大小。ReDim语句声明只能在过程当中使用,它是可执行语句,可以改变数组中元素的个数,但是却不可以改变数组的维数,就是说不能把一维变为二维。在ReDim语句配置数组元素个数时,数组中的内容将全部置为0。典型语句为:

  • ReDim Types(X+1)

③如果想改变数组大小又不想丢失原来的数据,只要在ReDim语句中包含Preserve关键字就可以,典型语句为:

  • ReDa_m PresetVe Types(10,23)

对于多维数组,在使用Preserve关键字时,只能修改最后一维的大小。如果改变其他维,那么将出现运行错误。如果不清楚某维的当前大小,可以使用GetI~ength函数来获取。

(4)VB.NET数组的使用

在’VB 6.0中,可以用For Each来循环遍历一个数组。例如:

  • Dim x As Integer
  •   F0r Each x In arrayl
  •   Console.WriteLine(x)
  •   Next

在VB.NET中可以使用For循环和数组长度来遍历一个数组。例如:

  • Dim i As工nteger
  •    F0r i=0 T0  (arrayl.Length-1)
  •    Console.WriteLine(arrayl(1)J
  •    Next i

在使用数组时还要注意,不仅声明语法有变化,而且在运行时处理方式也有了很大的变化。VB.NET在堆栈中给数组分配地址空间,当向一个方法传递数组类型的参数时,使用的是引用传递而不是值传递。下面是互相传递数组引用的三个方法:

  • Dim arrayl(3,3)AS Integer
  •     Dim array2 As Integer(,)
  •     Redim array2(3,3)
  •     Dim array3 As Integer(,)={{2,4},{12,29}}

方法一在两个方向同时传递了数组引用,一般用来向调用者返回数组引用。方法二和方法三从调用者向方法的实现中传递了数组引用。方法二的参数被声明为一维数组,而在方法三中参数被声明成了-维数组。

(5)数组的高级特性

①数组的数组

在O~ect数组中还可以组装不同类型的数组。例如,以下代码中先建立两个数组,一个是Integer类型,另一个是String类型,然后再声明一个O~ect类型的数组,把前两个数组分装在其中。

  • Dim I as integer
  • //声明一个integer类型的数组
  • Dim grade(15)as integer
  • For i:0 tO 14
  • Grade(i)=i
  • NeXt i
  • //声明一个string类型的数组
  • Dim name(15)as String
  • For i=0 tO 14
  • Name(i):”Student”&cstr(i)
  • Next i
  • //声明一个新的数组为object,用来组装其他数组
  • Dim Student(2)as object
  • Student(0)=grade
  • Student(1)=name
  • Msgbox(student(0)(2))  //显示”2”
  • Msgbox(student(1)(3))  //显示”student 3”。

上述代码中使用了student(0)和student(1)的后绑定。注意,只有在Option s~ict被关闭时,VB.NET编译器才允许使用后绑定。

②数组和集合

虽然集合通常用于操作对象,但是它也能操作数据类型。在某些条件下,其效率比数组还要高。我们可以通过以下4个方面来进行比较。

◆集合可以根据需要进行扩充,不像数组那样需预先规定大小。

◆数组只能保存声明时所定义的数据类型,但是同一个集合中可以存储不同类型的数据。

◆集合元素的修改较为麻烦,不像数组那么方便。

◆处理集合的速度较数组慢,但是在处理较小的动态条目集,使用集合是最为理想的选择。


变量、数组、集合、泛型的发展

           最开始用内存中一个位置映射一个值,用变量来“使用”这个值。

           进一步发展,用变量来引用一组值,这就是数组。由数组概念,发展出链表、堆、栈,进行排序、检索等。

           但这并不能完全表达,由此发展出集合概念,它是更强大的数组,都依赖于Object基类。

           随之而来的是集合中元素并不一定是一样的,于是都得转为Object,涉及到装箱,使性能下降,特别是元素量巨大时。而且

                          由于我们一般使用同一类型(强类型)更方便操作。由此产生了泛型

           泛型简单地说,就是把里面的元素强制指定为特定的类型,也可以说是模板。







一、数组


1、数组的定义      

         System.Array类是数组的基础,数组就是由它派生而来。

         所有.Net数组和集合的下标总是从0开始。故元素的个数是上限+1

         数组的定义:


[vb] view plain copy
print?


  • Dim a1(20) As Integer  
  • Dim a2() As Integer = {1, 2, 3, 4}  
  • Dim a3(4, 2) As Integer  
  • Dim a4(,) As Integer = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}, {13, 14, 15}}  
  • Dim a5() As Integer  

        a1数组是从a1(0)到a1(20)共21个元素,而不是20个元素。20表示上限。

        a2表示4个元素,上限是3,即a2(3)

        a3表示的是二维数组

        a4也是二维,但其一维和二维的上限由后面的值来确定。

        a5表示是不定数组,将在后面的使用中来确定,它是一个重要的概念





2、多维数组

       UBound用来提取数组中某维中的上限(注意不是个数),LBound是提取数组的下限,由于下限永远是从0开始,所以这个函数没用了。

        另外维数是从左到右,从1开始计数(这与元素索引从0开始计数不同)

        需要注意的是: GetUpperBound(0)也是提取上限,例如 :  a1.GetUpperBound(0)

                                     它的维数却是以0开始,相当于UBound中维数的1


[vb] view plain copy
print?


  • Module Module1  
  •   
  •     Sub Main()  
  •         Dim a(,) As Int32 = {{1, 2, 3}, {3, 4, 5}, {6, 7, 8}}  
  •         Dim temp As Int32  
  •         For i As Int32 = 0 To UBound(a)  '即UBound(a,1)  
  •             For j As Int32 = 0 To UBound(a, 2) '将返回其最大可用下标的维度。 对第一维使用 1,对第二维使用 2,  
  •                 temp += a(i, j)                '依此类推。 如果省略 Rank,则假定为 1。  
  •             Next  
  •         Next  
  •         Console.WriteLine(temp)  
  •         Console.Read()  
  •     End Sub  
  •   
  • End Module  




3、不定数组

       就是声明时并没有实例化的数组,它只是说明了类型,却没有在内存中分配空间(因为元素个数未定)

       因此,它没有具体实例化前是不能直接使用的,如图,出错:

       在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件


       未处理,其值为空。



       ReDim

         不定数组在使用前须用ReDim来实例化(指明个数,以便分配内存空间),但不得改变成其它类型,否则出错。


[vb] view plain copy
print?


  • Sub Main()  
  •         Dim a() As Int32  
  •         ReDim a(3) '只能实例化,不能声明(成类型)  
  •         Console.WriteLine(a(0))  
  •         Console.Read()  
  • End Sub  

        注意:ReDim与VB6中不同:(1)须先声明类型,再用ReDim,不能用ReDim来声明(成其它类型)

                                                              (2)不能改变数组维数(增加或减少都不行)



         Preserve

         保持之意。不定数组经ReDim实例化后,还可再次用ReDim来改变,第二次改变会直接改变第一次实例化中重叠的元素。

          为了保持元素值,用Preserve来指明。

          注意Preserve只能修改最后一维的大小。


[vb] view plain copy
print?


  • Sub Main()  
  •     Dim a(,) As Int32  
  •     ReDim a(6, 5)  
  •     a(6, 1) = 3  
  •     ReDim a(7, 4)        '正确,无Preserve时,可以修改多维   
  •     'ReDim Preserve a(5, 4) '错误,有Preserve时,只能修改最后一维的大小  
  •     Console.WriteLine(a(6, 1))  
  •     Console.Read()  
  • End Sub  









二、集合


             数组功能很强大,但Array基类并没为数组提供更多的功能,比如排序、动态分配内存。为了更强大的功能产生了集合。


            集合(Collections)名称空间是System名称空间的一部分,它提供系列高级功能。

            对不同的用处,System.Collections名称空间提供了几个强大的类:

                      ArrayList    实现一个数组,其大小在添加元素时自动增加大小(不必烦恼数组的上限或用ReDim、Preserve)

                      BitArray      管理以位值存储的布尔数组

                      Hashtable   实现由键组织的值的集合(Key,Value),排序是基于键的散列完成的(哈希函数)

                      Queue         实现先进先出集合(排序方式)

                      Stack            实现后进先出集合

                      SortedList    实现带有相关的键的值的集合,该值按键来排序,可以通过键或索引来访问



1、ArrayList  数组列表

             ArrayList 仅一维且不保证是排序的。 可使用一个整数索引访问此集合中的元素。 此集合中的索引从零开始。

             在执行需要对 ArrayList 排序的操作(如 BinarySearch)之前,必须对 ArrayList 进行排序。

           ArrayList 的容量是 ArrayList 可以包含的元素数。 随着向 ArrayList 中添加元素,容量通过重新分配按需自动增加。
           可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。对于非常大 ArrayList 对象,则在运行时环境
          (ide) 中增加最大容量为 20亿在 64 位系统的元素通过设置 gcAllowVeryLargeObjects 配置元素的 enabled 属性设置为 true 。

            ArrayList 集合接受 null 引用(在 Visual Basic 中为 Nothing) 作为有效值并且允许重复的元素。


[vb] view plain copy
print?


  • Module Module1  
  •   
  •     Sub Main()  
  •         '使用大小会根据需要动态增加的数组来实现 IList 接口  
  •         Dim objArryList As New System.Collections.ArrayList  
  •         Dim objItem As Object  
  •         Dim intLine As Int32 = 1  
  •         Dim strHello As String = "Hello"  
  •         Dim objWorld As New System.Text.StringBuilder("World")  
  •   
  •         objArryList.Add(intLine)  
  •         objArryList.Add(strHello)  
  •         objArryList.Add(" "c)  
  •         objArryList.Add(objWorld)  
  •         objArryList.Insert(1, ". ") '在索引1处插入。(索引从0开始)  
  •   
  •         For Each objItem In objArryList  
  •             Console.WriteLine(objItem.ToString)  
  •         Next  
  •         Console.Read()  
  •     End Sub  
  •   
  • End Module  

          可以看到使用很方便:1、不需要声明数组大小

                                                   2、不需要重写定义数组大小

                                                   3、不需要用Preserve来保持数据

          ArrayList都会自动完成这样的功能。





2、Hashtable  哈希表

         表示根据键的哈希代码进行组织的键/值对的集合。

         键通过一个哈希函数来确定元素值的具体存储位置。这样就可以快速由Key取得值。

         键不能是Nothing(NULL),值可以是。

         优点:定位查找一个值,插入、删除一个映像的效率最高。




3、SortedList  排序列表
             hashtable是没有排序的,所以新增元素会比较快。而SortedList 存储的键值对,是按key进行排序了的,

            因为要排序,所以新增元素时,要先查找元素的位置再插入,相对慢些,但是在查找时比较快。

            下面,每变动一次元素,自动会按Key进行排序,所以最后不需排序,就可得到排序的结果:

             在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件





4、Queue 队列

           表示对象的先进先出集合。

          队列在按接收顺序存储消息方面非常有用,以便于进行顺序处理。 此类将队列作为循环数组实现。 存储在 Queue 中的对象在一端插入,从另一端移除。

          Queue 的容量是 Queue 可以包含的元素数。 随着向 Queue 中添加元素,容量通过重新分配按需自动增加。 可通过调用 TrimToSize 来减少容量。

          等比因子是当需要更大容量时当前容量要乘以的数字。 在构造 Queue 时确定增长因子。 默认增长因子为 2.0。 Queue 的容量将始终加 4,

          无论增长因子是多少。 例如,当需要更大的容量时,增长因子为 1.0 的 Queue 的容量将始终增加四倍。

          Queue 接受 null 引用(在 Visual Basic 中为 Nothing) 作为有效值并且允许重复的元素

          在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件





5、Stack 栈

        表示对象的简单后进先出 (LIFO) 非泛型集合

          在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件


         注意:比较与Queue的输出顺序





6、循环控制

      (1)For...Next...

           For Each...Next...

                     越过循环:Contunue For

                     退出循环:Exit For


       (2) While..End While       (更常用)

              Do While...Loop

               Do  Until...Loop

                        同理,越过:Continue While        或Continue Do

                                    退出:Exit While                  或Exit  While


       (3)Thread.Sleep()

             大循环或无限循环中,会一直占用线程,给造成界面假死现象,可用Thread.Sleep(),这样仅在给定时间才执行,以避免

              消耗过多的处理器时间。

                     while   i=1

                                 ....

                                 system.Threading.Thread.Sleep(500)  

                                 ...

                      end while










三、泛型



1、装箱(Boxing)

         (1)什么是装箱?

                  值类型存储在栈上,引用类型存储在堆上。

                  当值类型向引用类型转变,即从栈向堆上转移,这时值就变成了一对象,就好像值类型外面包装了一层东西,这个过程叫装箱(Boxing)  


[vb] view plain copy
print?


  • '不需要装箱,都是值类型  
  • Dim a1(20) As Integer  
  • Dim a2 As Integer = 1  
  •   
  • a1(0) = 0  
  • a1(1) = a2  
  •   
  • '需要装箱,String是引用类型  
  • Dim b1 As New System.Text.StringBuilder()  
  • Dim b2 As New System.Collections.SortedList()  
  • Dim i As Integer  
  •   
  • For i = 1 To 100  
  •     b1.Append(i) '未装箱,直接接收  
  •     b2.Add(i, i) '装箱,参数需要两个对象,要转换integer为对象  
  • Next  




           (2)装箱的影响

                    显然装箱会使“值”的外层多了一些“无用”的东西,会使得性能稍有下降。

                    集合中元素都来自Object(引用类型),即,它是在堆上,都涉及到一个装箱,如果数据量大时,性能下降得就可观了。

                   当需要时其中的“值”时,又需要把箱子,从堆上转移到栈上,即引用类型变成值类型,这个过程叫拆箱。



             (3)为什么要有泛型?

                     集合中,任何引用或值类型都将隐式地向上强制转换为Object。如果项是值类型,添加到列表中时,进行装箱操作,在检索时进行取消装箱操作。

                     这样,强制转换以及装箱和拆箱操作都会降低性能。

                     另一个限制是缺少编译时类型检查。同一个集合可接收不同类型,所有项都强制转换为 Object,在编译时无法检查是否可以收这种类型,还是人为

                     错误输入了另一个类型,同时智能感应只会提示Object的方式,使得检查错误变得艰难。


                    如果我们对其中的类型进行一些限制,使之成为统一的类型,虽然稍微增加了编码的复杂性,但好处是可以创建一个 更安全并且速度更快的列表,

                    校验错误也变得容易。


                     鉴于这种情况,催生了泛型的产生。




2、泛型的使用

         泛型主要的目的是创建强类型化的集合,使处理速度加快。所以前面使用Object的普通集合类,最好使用泛型。

         泛型内置于.net中,允许定义代码模板,然后使用这个模板声明变量,它实际上是创建了一个新的数据类型。


         .net基类库(BCL)里有许多泛型模板,多位于System.Collections.Generic名称空间,也有分布在其它BCL中。


          泛型带来的性能提升,可以让任何使用集合数据类型的地方都应当使用泛型代替。


           泛型通常使用List(of   T)形式,List是类型(或者类)的名称 ,字母T是点位符类似于参数。它表示 必须提供一个用来定制泛型

           的特定类型值,同时也限定的它只能是这个类型。


[vb] view plain copy
print?


  • Dim data1 As New List(Of Date) '元素只能是Date类型  
  • '===================================  
  • Dim data2 As New ArrayList  '未限定元素类型,任意。(object)  
  • data2.Add(5)  
  • data2.Add("xxx")  
  • data2.Add(3.2)  
  • For Each i As Object In data2  
  •     TextBox1.AppendText(i.ToString & Environment.NewLine)  
  • Next  


             上面可以看到,当没有限定时,它是Object,因为可能是integer,String,double等,最终将转向Object。也就是说

              普通集合中元素是多种情况,只有当用了泛型才进行了统一,这样处理更快。


               当用了泛型后,类型参数指明后,将不能再用其它类型,如下:


[vb] view plain copy
print?


  • Dim data1 As New List(Of Integer) '元素只能是Integer类型  
  • data1.Add(33)           '正确  
  • data1.Add("Hello")      '错误,不能为string  


               泛型有两种形式:泛型类型和泛型方法

                        List(of  T)是泛型类型,定义了完整的类型或类的模板。

                        泛型 方法是一种方法模板,使用时必须指明方法使用的“具体类型”。




3、Nullabel   可空类型

        简言之:可以有空值的类型。 比如数据库有字段有integer型,但有时是DBNULL(空值),在取时会出错,这个类型就有用处了。

        Nullable不是值类型。


[vb] view plain copy
print?


  • Dim intValue1 As New Nullable(Of Integer) '可为空的Integer类型  
  • Dim intValue2 As Integer?   '与上句等效  
  •   
  • intValue1 = 3  
  • intValue1 = Nothing '可为空,正确  
  • intValue2 = Nothing  





[vb] view plain copy
print?


  • Dim intValue1 As New Nullable(Of Integer) '可为空的Integer类型  
  •   
  • intValue1 = Nothing  
  • If intValue1.HasValue Then '判断是滞有值  
  •     MessageBox.Show("有值")  
  • Else  
  •     MessageBox.Show("空值")  
  • End If  

              在取得这样的类型时,当用判断来说明值的情况。




4、泛型类型

      泛型有两形式:泛型类型、泛型 方法。下面说明泛型类型

         泛型类型是用来定义类、结构、接口的模板。在使用泛型类型声明变量时,需要提供真正(具体)的类型,以确定实际类型。


     (1)泛型的基本用法


[vb] view plain copy
print?


  • Dim data As New Generic.Dictionary(Of Integer, String)  
  •   
  • data.Add(3, "OK")  
  • data.Add(4, "dz")  
  • data.Add(1, "John")  
  •   
  • 'KeyValuePair(Of Integer, String) 键值对元素  
  • For Each o As KeyValuePair(Of Integer, String) In data  
  •     TextBox1.AppendText(o.Key & "," & o.Value & vbCrLf)  
  • Next  
  • '==========================  
  • Dim data2 As New Generic.Dictionary(Of Guid, Date)  
  •   
  • data2.Add(New Guid, Now)  
  • For Each o As KeyValuePair(Of Guid, Date) In data2  
  •     TextBox1.AppendText(o.Key.ToString & "," & o.Value) 'Guid须转String  
  • Next  

           Generic.Dictionary(Of K,T)泛型,与List(Of  T)类型类似,但需两个类型参数来提供键与值(Key,Value)。

           新的Dictionary类型只接受特定类型的键与值,如上面第一个是Integer与String。第二个只接收Guid与Date。



             上面是声明时的情况,下面是作返回值的情况


[vb] view plain copy
print?


  • Private Function reGeneric() As Generic.Dictionary(Of Integer, String) '返回值类型  
  •     Dim data As New Generic.Dictionary(Of Integer, String)  
  •     data.Add(3, "dx")  
  •     data.Add(2, "qxj")  
  •     data.Add(1, "ase")  
  •     Return data  '返回泛型  
  • End Function  


            可以这样调用上面函数:


[vb] view plain copy
print?


  • Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  •     Dim data As New Generic.Dictionary(Of Integer, String)  
  •   
  •     data = reGeneric() '调用,取得泛型  
  •     For Each o As KeyValuePair(Of Integer, String) In data  
  •         TextBox1.AppendText(o.Key & "," & o.Value & vbCrLf)  
  •     Next  
  • End Sub  


          泛型还可以作为传参:


[vb] view plain copy
print?


  • Private Sub useGeneric(ByVal k As Generic.Dictionary(Of Integer, String)) '泛型作参数  
  •     'add code  
  • End Sub  



         (2)继承

             定义新类时,可以继承泛型类型。

             例如:.net BCL定义的System.ComponentModel.BindingList(Of  T)泛型类型,它用于创建支持数据绑定的集合。

                          可以将其作用基类,创建支持数据绑定的强类型集合。


[vb] view plain copy
print?


  • Public Class Form1  
  •     Dim list As New CustomerList  
  •   
  •     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load  
  •         DataGridView1.DataSource = list  
  •     End Sub  
  • End Class  
  •   
  • Public Class Customer  
  •     Public Property Name() As String  
  • End Class  
  •   
  • Public Class CustomerList  
  •     Inherits System.ComponentModel.BindingList(Of Customer) '必须指明具体的类型(如Customer)  
  •   
  •     Private Sub CustomerList_AddingNew(ByVal sender As Object, ByVal e As System.ComponentModel.AddingNewEventArgs) Handles Me.AddingNew  
  •         Dim cust As New Customer  
  •         cust.Name = "<new>"  
  •         e.NewObject = cust  
  •     End Sub  
  • End Class  

        上面继承时,必须指明具体类型,于是可以用BindingList(Of  Customer)

        常规继承概念也可以用在其中,比如:重载、重写、事件等。

             在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件






5、泛型方法

         泛型方法语法较复杂,较难理解。在调用泛型方法时,要使用定义该方法的类型参数外,还可以使用普通参数。


         泛型方法不必只在定义的泛型类型中使用,还可以任意的类型和模块中使用泛型方法。

          泛型方法的好处是:不需要使用Ctype或DirectCast转换不同类型的参数与返回值。(因为泛型是CType与DirectCast替换的机制,它实际上仍然会转换)


           下面重载泛型方法:


[vb] view plain copy
print?


  • Public Class Form1  
  •     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  •         Dim result As Boolean  
  •         result = AreEqual(1, 2)  
  •         result = AreEqual("one", "two")  
  •         result = AreEqual(1, "two") '均正确写法,转为object比较  
  •   
  •         '使用泛型  
  •         result = AreEqual(Of Integer)(1, 2)  
  •         result = AreEqual(Of String)("one", "two") '正确写法  
  •         result = AreEqual(Of Integer)(1, "two") '错误  
  •     End Sub  
  •   
  •     '不使用泛型  
  •     Public Function AreEqual(ByVal a As Object, b As Object) As Boolean  
  •         Return a.Equals(b)  
  •     End Function  
  •   
  •     '使用泛型(重载)  
  •     Public Function AreEqual(Of T)(ByVal a As T, b As T) As Boolean  
  •         Return a.Equals(b)  
  •     End Function  
  • End Class  

           泛型方法会有两套参数(分别用两个括号):

                  第一套参数(第一个括号)用来定义方法中使用的类型

                  第二套参数(第二个括号)与我们平时的参数列表一样,只不过用T等来代替要用的类型。

           上面如果在Option  Strict On时






6、创建泛型类型

        通过前面感性认识了:泛型类型与泛型 方法。


         泛型类型是定义类、结构、接口的模板,通过创建模板获得更好性能实现代码重用。



       (1)泛型类

            创建泛型类模板与创建普通类类似,但前者要求提供使用的类型,这样在使用时以便明确这个类型:


[vb] view plain copy
print?


  • '创建泛型类(定义)  
  • Public Class SingleLinkedList(Of T) 'T可自定,但在使用中,声明时须指定明确的类型  
  •     'add code  
  • End Class  

           上面在使用(声明)中,就须指明T的具体类型,T与变量命名方式一样。


           下面创建链表,为了适合不同类型情况,使用泛型。在这个嵌套类中先定义结点类Node:


[vb] view plain copy
print?


  • Public Class SingleLinkedList(Of ValueType) '单向链表类。其中,自定类型ValueType  
  • #Region "Node Class"  
  •     Public Class Node '每个结点由当前值、指向下一个结点的引用,这两个元素组成  
  •         Private mValue As ValueType  
  •   
  •         Public ReadOnly Property Value() As ValueType '当前结点的值  
  •             Get  
  •                 Return mValue  
  •             End Get  
  •         End Property  
  •         Public Property NextNode() As Node '下个结点的引用  
  •         Public Sub New(ByVal value As ValueType, ByVal newNode As Node) '创建新结点  
  •             mValue = value  
  •             NextNode = newNode  
  •         End Sub  
  •     End Class  
  • #End Region  
  • End Class  


      这样在声明使用中就可以使用具体类型,比如用Double类型的链表:

        Dim list As New SingleLinkedList(Of Double)
      这时,在类的的ValueType实际上就变成了:
        Private mValue As Double


        实际上,在设计时(ValueType类型),被当作了Object(类型),故只能使用System.object类型上的方法:

                     Equals()、  GetHashValue()、     GetType()、   ReferenceEquals()、    Tostring()

        这将限制我们操作,并且智能化提示也受限,后面将用约束概念,来明确选择的类型,这样扩展功能增强智能化提示。


         然后,使用Node完善链表类:        


[vb] view plain copy
print?


  • Public Class SingleLinkedList(Of ValueType) '单向链表类。其中,自定类型ValueType  
  • #Region "Node Class"  
  •     Public Class Node '每个结点由当前值、指向下一个结点的引用,这两个元素组成  
  •         Private mValue As ValueType  
  •   
  •         Public ReadOnly Property Value() As ValueType '当前结点的值  
  •             Get  
  •                 Return mValue  
  •             End Get  
  •         End Property  
  •         Public Property NextNode() As Node '下个结点的引用  
  •         Public Sub New(ByVal value As ValueType, ByVal newNode As Node) '创建新结点  
  •             mValue = value  
  •             NextNode = newNode  
  •         End Sub  
  •     End Class  
  • #End Region  
  •   
  •     Private mHead As Node '头结点,也是当前结点。(按倒序加入结点,参看后图)  
  •   
  •     Default Public ReadOnly Property Item(ByVal index As Integer) As ValueType '获取第N个结点值  
  •         Get  
  •             Dim current As Node = mHead  
  •             For i As Integer = 1 To index  
  •                 current = current.NextNode  
  •                 If current Is Nothing Then  
  •                     Throw New Exception("Item not found in list")  
  •                 End If  
  •             Next  
  •             Return current.Value  
  •         End Get  
  •     End Property  
  •   
  •     Public Sub Add(ByVal value As ValueType) '添加结点到链表  
  •         mHead = New Node(value, mHead)  
  •     End Sub  
  •   
  •     Public Sub Remove(ByVal value As ValueType) '从链表中移除结点  
  •         Dim current As Node = mHead  
  •         Dim preNode As Node = Nothing  
  •   
  •         While current IsNot Nothing  
  •             If current.Value.Equals(value) Then  
  •                 If preNode Is Nothing Then '是否为头结点  
  •                     mHead = current.NextNode  
  •                 Else  
  •                     preNode.NextNode = current.NextNode '非头结点(参看下图)  
  •                 End If  
  •                 Exit Sub '已移除,退出  
  •             End If  
  •             preNode = current  
  •             current = current.NextNode  
  •         End While  
  •         Throw New Exception("Item not found in list") '链表中未找到  
  •     End Sub  
  •   
  •     Public ReadOnly Property Count() As Integer '统计结点数  
  •         Get  
  •             Dim result As Integer = 0  
  •             Dim current As Node = mHead  
  •             While current IsNot Nothing  
  •                 result += 1  
  •                 current = current.NextNode  
  •             End While  
  •             Return result  
  •         End Get  
  •     End Property  
  • End Class  

在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件



           定义好链表类后,下面使用:


[vb] view plain copy
print?


  • Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  •     Dim list As New SingleLinkedList(Of String)  
  •   
  •     list.Add("one")  
  •     list.Add("two")  
  •     list.Add("three")  
  •     list.Add("sichuan")  
  •     list.Add("dazhou")  
  •     TextBox1.Clear()  
  •     TextBox1.AppendText(list.Count & vbCrLf)  
  •     For i As Integer = 0 To list.Count - 1 '这里只能从0,因为你不能预知是否有结点。  
  •         TextBox1.AppendText(list.Item(i) & vbCrLf)  
  •     Next  
  • End Sub  

         运行,结果如下:

            在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件





     (2)泛型类的其它功能

              Dictionay泛型有多个类型参数,还可带其它普通类型:


[vb] view plain copy
print?


  • Public Class MyType1(Of T, V) '带两个类型参数  
  •     Private mValue As T  
  •     Private mData As V  
  •   
  •     Public Sub New(ByVal value As T, ByVal data As V) '带两个类型参数  
  •         mValue = value  
  •         mData = data  
  •     End Sub  
  • End Class  
  •   
  • Public Class MyType2(Of T, V)  
  •     Private mValue As T  
  •     Private mData As V  
  •     Private mMoney As Double  
  •   
  •     Public Sub New(ByVal value As T, ByVal data As V, ByVal money As Double) '带两个类型参数及一个普通类型参数  
  •         mValue = value  
  •         mData = data  
  •         mMoney = money  
  •     End Sub  
  • End Class  





        (3)类、泛型类与继承

          泛型类实际上是一种特殊的类。因此也具有继承等特点。

          泛型类可以继承现成的类,普通类也可继承泛型类,泛型类可以继承泛型类。还有复杂的泛型子类传回泛型父类。


[vb] view plain copy
print?


  • '泛型继承现成的类  
  • Public Class MyControls(Of T)  
  •     Inherits Control  
  • End Class  
  •   
  • '基类泛型  
  • Public Class GenericBase(Of T)  
  •     'add code  
  • End Class  
  •   
  • '类继承泛型  
  • Public Class SubClass  
  •     Inherits GenericBase(Of Integer) '必须指明类型  
  •     'add code  
  • End Class  
  •   
  • '泛型继承泛型(不同类型)  
  • Public Class GenericSubClass1(Of T)  
  •     Inherits GenericBase(Of Integer) '必须指明类型  
  •     'add code  
  • End Class  
  •   
  • '泛型继承泛型  
  • Public Class GenericSubClass2(Of V) '在使用时(声明)指明V类型  
  •     Inherits GenericBase(Of V)  '与上V相同,故类型由子类传递回父类  
  •     'add code  
  • End Class  
  •   
  • '复杂子类泛型传递回父类  
  • Public Class GenericSubClass3(Of V)  
  •     Inherits GenericBase(GenericBase(of V)) '子类型传回父类  
  •     'add code  
  • End Class  




           (4)结构、接口中使用泛型

            结构与类一样,在结构中也可以使用泛型:


[vb] view plain copy
print?


  • '结构中使用泛型   
  • Public Structure MyCool(Of T)  
  •     Public value As T  
  • End Structure  

             这样,在使用时就可以:   Dim  data  as MyCool(Of   Guid)


            还可以定义泛型类接口类型。

             泛型接口与泛型类、泛型结构有所不同:它的实现依赖其它类型:


[vb] view plain copy
print?


  • '接口使用泛型  
  • Public Interface Icool(Of T)  
  •     Sub DoWork(ByVal data As T)  
  •     Function GetAnswer() As T  
  • End Interface  
  •   
  • Public Class ARegularClass  
  •     Implements Icool(Of String) '必须指明类型  
  •     Implements Icool(Of Integer)  
  •   
  •     '============String时情况==============  
  •     Public Sub DoWork(data As String) Implements Icool(Of String).DoWork  
  •         'add code  
  •     End Sub  
  •   
  •     Public Function GetAnswer() As String Implements Icool(Of String).GetAnswer  
  •         'add code  
  •     End Function  
  •   
  •     '==========Integer时情况=================  
  •     Public Sub DoWork1(data As Integer) Implements Icool(Of Integer).DoWork  
  •         'add code  
  •     End Sub  
  •   
  •     Public Function GetAnswer1() As Integer Implements Icool(Of Integer).GetAnswer  
  •         'add code  
  •     End Function  
  • End Class  

        上面泛型接口定义中无法明确类型,它依赖于ARegularClass中接口类型的定义(有两个:Integer、String)







7、创建泛型方法

      泛型方法也可以泛型类(类、结构、接口)中实现。

       也可以在普通(类、结构、接口、模块)中实现,只不过此时的类型参数是在方法指定(而不是在类、结构、接口上指定)


       下面泛型 方法在普通中,故类型直接在方法中指定(T):


[vb] view plain copy
print?


  • '模块中使用泛型  
  • Public Module Comparisons1  
  •     Public Function AreEqual(Of T)(ByVal a As T, ByVal b As T) As Boolean  
  •         Return a.Equals(b)  
  •     End Function  
  • End Module  
  •   
  • '类中使用泛型  
  • Public Class Comparisons2  
  •     Public Function AreEqual(Of T, R)(ByVal a As T, ByVal b As R) As R '返回也可为R  
  •         'add code  
  •     End Function  
  • End Class  








四、约束(限制)

              泛型类型、泛型方法在编写代码时,类型参数都被当作System.Object类型处理,这限制了使用类型参数的参数与变量的功能。

             即,只能进行赋值和调用所有System.Object变量的几个方法,大大限制了泛型的用途。


             约束就是来突破这种限制,并提供控制机制。约束提供指定规则,声明运行时可以代替类型参数类型。

             使用约束,可以限定类型参数必须是一个类或结构,也可限定类型参数必须实现接口或继承某基类。这样智能提示就生效了。


           通俗地说:约束暗示了某具体类型,使得智能提示生效。





1、类型约束

         这是常用约束,它限制某类型参数必须是指定类的子类或者必须实现指定的接口。

         改变上面的链接类成为ComparableLinkedList,这里泛型指明了ValueType,同时也指明它是一个接口IComparable。

         因此,智能提示会对ValueType类型提示IComparable的属性和方法:


[vb] view plain copy
print?


  • Public Class Form1  
  •     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  •         Dim list As New ComparableLinkedList(Of String)  
  •   
  •         list.Add("one")  
  •         list.Add("two")  
  •         list.Add("three")  
  •         list.Add("sichuan")  
  •         list.Add("dazhou")  
  •         TextBox1.Clear()  
  •         TextBox1.AppendText(list.Count & vbCrLf)  
  •         For i As Integer = 0 To list.Count - 1 '这里只能从0,因为你不能预知是否有结点。  
  •             TextBox1.AppendText(list.Item(i) & vbCrLf)  
  •         Next  
  •     End Sub  
  • End Class  
  •   
  •   
  • Public Class ComparableLinkedList(Of ValueType As IComparable) '类型参数同时也是接口(用于比较)  
  • #Region "Node Class"  
  •     Public Class Node  
  •         Private mValue As ValueType  
  •         Public ReadOnly Property Value() As ValueType  
  •             Get  
  •                 Return mValue  
  •             End Get  
  •         End Property  
  •         Public Property NextNode() As Node  
  •         Public Sub New(ByVal value As ValueType, ByVal newNode As Node)  
  •             mValue = value  
  •             NextNode = newNode  
  •         End Sub  
  •     End Class  
  • #End Region  
  •   
  •     Private mHead As Node  
  •     Default Public ReadOnly Property Item(ByVal index As Integer) As ValueType  
  •         Get  
  •             Dim current As Node = mHead  
  •             For i As Integer = 1 To index  
  •                 current = current.NextNode  
  •                 If current Is Nothing Then  
  •                     Throw New Exception("Item not found in list")  
  •                 End If  
  •             Next  
  •             Return current.Value  
  •         End Get  
  •     End Property  
  •   
  •     '=========这是原来不是接口时的添加元素的方法=========  
  •     Public Sub Add1(ByVal value As ValueType)  
  •         mHead = New Node(value, mHead)  
  •     End Sub  
  •   
  •     '======现在类型参数同时是接口(可用于比较)的方法=====  
  •     Public Sub Add(ByVal value As ValueType)  
  •         If mHead Is Nothing Then  
  •             mHead = New Node(value, mHead) '链表无结点时,直接添加  
  •         Else  
  •             Dim current As Node = mHead  
  •             Dim preNode As Node = Nothing  
  •             While current IsNot Nothing  
  •                 If current.Value.CompareTo(value) > 0 Then '===关键,接口使用(比较)  
  •                     If preNode Is Nothing Then  
  •                         mHead = New Node(value, mHead) '链表头  
  •                     Else  
  •                         preNode.NextNode = New Node(value, current) '链表中  
  •                     End If  
  •                     Exit Sub  
  •                 End If  
  •                 preNode = current  
  •                 current = preNode.NextNode  
  •             End While  
  •             preNode.NextNode = New Node(value, Nothing) '链表尾  
  •         End If  
  •     End Sub  
  •   
  •     Public Sub Remove(ByVal value As ValueType)  
  •         Dim current As Node = mHead  
  •         Dim preNode As Node = Nothing  
  •   
  •         While current IsNot Nothing  
  •             If current.Value.Equals(value) Then   
  •                 If preNode Is Nothing Then  
  •                     mHead = current.NextNode  
  •                 Else  
  •                     preNode.NextNode = current.NextNode  
  •                 End If  
  •                 Exit Sub  
  •             End If  
  •             preNode = current  
  •             current = current.NextNode  
  •         End While  
  •         Throw New Exception("Item not found in list")  
  •     End Sub  
  •     Public ReadOnly Property Count() As Integer  
  •         Get  
  •             Dim result As Integer = 0  
  •             Dim current As Node = mHead  
  •             While current IsNot Nothing  
  •                 result += 1  
  •                 current = current.NextNode  
  •             End While  
  •             Return result  
  •         End Get  
  •     End Property  
  • End Class  


             在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件



           由于上面同时是接口所以可以用CompareTo方法:

                             If current.Value.CompareTo(value) > 0 Then


           上面是限定为接口,下面还可限定为子类(Windows窗体控制Control)

           同时也是在方法中限定(上面是在泛型类型中):


[vb] view plain copy
print?


  • '约束类型参数必须是某类的子类(下例为Control的泛型方法)  
  • Public Shared Sub ChangControl(Of C As Control)(ByVal con As C)  
  •     con.Anchor = AnchorStyles.top Or AnchorStyles.left  
  • End Sub  
  •   
  •   
  •   
  • '===========================================================  
  • '约束类型参数为特定的泛型  
  • Public Class ListClass(Of T, V As Generic.List(Of T))  
  •     'add code  
  • End Class  
  • '使用时这样:  
  • Dim list As ListClass(Of Integer, Generic.List(Of Integer))  

          上面还限制了部分参数须是某泛型类型(V)






2、类、结构的约束

       下面限制类型参数必须是值类型或引用类型:


[vb] view plain copy
print?


  • '约束(限制)类型参数是引用类型  
  • Public Class ReferenceOnly(Of T As Class)  
  •     'add code  
  • End Class  
  •   
  •   
  • '约束(限制)类型参数是值类型  
  • Public Class ValueOnly(Of T As Structure)  
  •     'add code  
  • End Class  






3、New约束

          有时需创建类型参数定义的类型实例,必须使用New约束,来确保该类型有默认的公共构造函数。


[vb] view plain copy
print?


  • Public Class Factories(Of T As New)  
  •     Public Function CreateT() As T    '必须确保T有默认的构造函数,否则出错  
  •         Return New T  
  •     End Function  
  • End Class  

          类型参数T必须有公共的默认构造函数。若给T没指定构造函数的类型会出错。有了T的默认构造函数后,就可以CreateT创建实例。







4、多个约束

        可以指定类型参数为几个约束,用花括号。

       下面约束:必须是引用类型,且必须有公共的默认构造函数:


[vb] view plain copy
print?


  • Public Class Factories(Of T As {New, Class}) '限制类型参数可以为多种情况(花括号)  
  •     Public Function CreateT() As T  
  •         Return New T  
  •     End Function  
  • End Class  





5、泛型与后期绑定

         泛型的变量与参数在模板代码中被当作Object处理,虽然用约束解决了部分问题、扩展了变量类型,但仍受限制。

         比如,并不知道指定的类型是否支持+-等运算符重载:

[vb] view plain copy
print?


  • Public Function Add(Of T)(ByVal a As T, ByVal b As T) As T  
  •     Return a + b '错误,因不知道是否支持运算符重载  
  • End Function  
  •   
  • '改为下面(option strict off)  
  • Public Function Add1(Of T)(ByVal a As T, ByVal b As T) As T  
  •     Return CObj(a) + CObj(b) '此时应重载+,这样才不会出错  
  • End Function  









五、协变与逆变

        协变逆变利用继承关系 对不同参数类型或返回值类型 的委托或者泛型接口之间做转变。

        协变和逆变是说明父类与子类的相互转换。


         简单地说:子--》父(协变);父--->子(逆变)

                             因为子到父的转换永远正确(协变),而父到子的转换不一定正确所以也称(逆变)


         例如Animal是父类,Dog是从Animal继承的子类。

          如果一个方法要接受Dog参数,那么另一个接受Animal参数的方法肯定也可以接受这个方法的参数,这是Animal向Dog方向的转变是逆变。

          如果一个方法要求的返回值是Animal,那么返回Dog的方法肯定是可以满足其返回值要求的,这是Dog向Animal方向的转变是协变。


         它们的主要应用场合是多态。


1、协变

      子--->父


[vb] view plain copy
print?


  • '父类  
  • Public Class Parent(Of T)  
  •     'add code  
  • End Class  
  •   
  • '子类  
  • Public Class ChildClass(Of T)  
  •     Inherits Parent(Of T)  
  •   
  •     'add code  
  • End Class  
  •   
  • '多态应用中,协变  
  • Public Class CoVariance  
  •     Public Sub MainMethod()  
  •         Dim cc As New ChildClass(Of String)  
  •         Dim dad As Parent(Of String)  
  •   
  •         dad = cc    '子类赋值给父类,协变  
  •     End Sub  
  • End Class  




2、逆变

      父---->子


[vb] view plain copy
print?


  • '父类  
  • Public Class Base  
  •   
  • End Class  
  •   
  • '子类  
  • Public Class Derived  
  •     Inherits Base  
  •   
  • End Class  
  •   
  • '应用(泛型逆变)  
  • Public Class ContraVariance  
  •     '封装一个方法,有一个参数且无返回值,即baseMethod(byval param as Base)  
  •     Private baseMethod As Action(Of Base) = Sub(param As Base)  
  •                                                 'add code  
  •                                             End Sub  
  •     'derivedMethod(byval param as Derived)  
  •     Private derivedMethod As Action(Of Derived) = baseMethod  
  •   
  •     Public Sub MainMethod()  
  •         Dim d As Derived = New Derived()  
  •   
  •         derivedMethod(d)  
  •         baseMethod(d)  
  •     End Sub  
  • End Class  
[url=] 在VB.NET编程中使用数组让您编程有一个质的速度 b2b软件 [/url]





untoVB.NET的字节校验实用的各种方法汇集nextVB.net教您一招可以实现邮件自动发送自动收发邮箱
回复

使用道具 举报

0

主题

605

帖子

589

积分

积分
589
信息发布软件沙发
发表于 2017-5-16 21:17:49 | 只看该作者
,清晰度也很合适。太划算啦

回复 支持 反对

使用道具 举报

0

主题

640

帖子

632

积分

积分
632
推广工具板凳
发表于 2017-5-20 16:17:15 | 只看该作者
,客服很有耐心,我说了很多的要求都一一的帮我改了,有需要还会再来找你们设计的

回复 支持 反对

使用道具 举报

0

主题

641

帖子

627

积分

积分
627
软件定制开发地板
发表于 2017-5-26 01:31:31 | 只看该作者
,而且很时尚,发货也很快,服务态度好,好评!

回复 支持 反对

使用道具 举报

0

主题

2181

帖子

2

积分

积分
2
5#定制软件#
发表于 2017-5-26 14:47:35 | 只看该作者
不错,和卖家描述的一样,值得入手,好评

回复 支持 反对

使用道具 举报

0

主题

595

帖子

559

积分

积分
559
6#定制软件#
发表于 2017-5-31 05:38:45 | 只看该作者
很快,给力卖家赞一个!!!

回复 支持 反对

使用道具 举报

0

主题

627

帖子

625

积分

积分
625
7#定制软件#
发表于 2017-6-10 05:54:46 | 只看该作者
术不错。。。整的巴适。。。

回复 支持 反对

使用道具 举报

0

主题

636

帖子

624

积分

积分
624
8#定制软件#
发表于 2017-6-12 09:30:26 | 只看该作者
模板操作简单方便,店家讲解详细,有详细的安装程序,卖家服务好,有问必答,而且都是第一时间给予协助,解决了很多问题,大家有需要就买这家就对了,很值得信任的卖家!合作非常愉快,下次还来

回复 支持 反对

使用道具 举报

0

主题

1012

帖子

1012

积分

积分
1012
9#定制软件#
发表于 2017-6-14 03:34:40 | 只看该作者
序员哥哥好有耐心!点赞!

回复 支持 反对

使用道具 举报

1

主题

640

帖子

612

积分

积分
612
QQ
10#定制软件#
发表于 2017-6-14 03:50:09 | 只看该作者
路过,支持一下啦

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读
信息发布软件明珠网POST发帖工具下载
明珠网全自动发布帖子软件,这个网站做两个发帖过程,一个是 POST 的,一个是普通版本,现在 POST 版本是电脑差的标准配置,不过效率还是非常高的,要是自己能弄几个这样的网站,加上收录好的,是一笔不错的收录量,只可惜很多笨人根本看不透这些事,还拼了命的去找网站发,自己养几个网站效果是很多找网站的几十倍,不过很多人也不珍惜这样的机遇,因为网站前期都有很高的收录量保护期的,一旦不把握好这样的新手村效果,就变的无
信息发布软件天龙新闻网全自动发帖软件
天龙新闻网全自动发帖软件,这个是 B2B 网站,有的人找不到网站的自然能看上这类网站自动发帖的,因为都简单,导入标题内容,充好账号的积分,就可以全自自动的发帖,不用太多的干扰就行了,网站只有资讯和文章二个分类可以发,账号充的会员过期会发帖不了,虽然只能发两个分类,不过都已经把分类给做到脚本里的,他们对应分类会进去选择分类,或是上传图片了,输入标题内容都是通用的,添加产品这些网站不让发,打开也是没有用的
信息发布软件脉脉账号挂机软件下载
脉脉自动挂机注册账号软件下载,这个脚本是注册脉脉账号的,用了豪猪的接口打码,还有椰子接口打码,二个差不多,哪一个有账号就拿哪一个用,要注意的是猪这个接口账号一另一个网站不一样,他是加密后的账号密码,一般人记不住,只能用普通账号进去网站后,点 API 账号进行获取,得到手机号码后,才可以进行注册用,注册账号后,会采集账号的缓存,这样就可以后面发帖使用啥的,比较简单,也是相当麻烦的脚本,看上去是普通的与注
信息发布软件乐搜网全自动发帖工具
乐搜网全自动群发软件是一款非常好用的工具,它能够帮助用户轻松实现信息的群发和帖子的发布,提高工作效率和传播效果。用户对该软件的评价也非常高,认为它是一款值得信赖和使用的工具。 乐搜网全自动发帖工具下载: 乐搜网全自动群发软件作为一款功能强大且用户友好的工具,不仅极大地简化了信息传播的过程,还通过其多样化的功能满足了不同用户的特定需求。该软件支持多种类型的信息群发,包括但不限于文本、图片以
信息发布软件揭阳优聘自动群发工具下载
揭阳优聘自动群发工具下载,这个网上右上角有联系电话号码,你要发帖就只能找他免费给你发送,发帖有验证码,会员应该都不需要会员就可以发帖,比较简单,做起来步骤是比较多的,但效果还是很好的,采集地多发送,只能发到他这个网站所在地,固定的,虽然标记是地区的,但其实全世界也可以访问进去的,百度收录的也有 N 多,全部是有效信息,网站对这些发帖删的极少的存在,网站没有什么大的限制,只是发帖容易一些收录,他网站主
信息发布软件GPT4文章生成器软件
一直有人问我用文章怎么自动生成器操作,这个软件脚本就可以自动群发文章生成器作用,他是对接 GPT4.0 生成的,而且是最新的接口,他这个网站接口还是基本稳定的,不管怎么整,他都还在,也经过历史的检验了,这个脚本已经是去年做的,拿起来直接现在还可以用,说明还算稳定了,现在增加一个接口选择,他接口是一个字母代码的,也加上了清空会话,不然网站会发现在弄了太多会话,会有可能把你的号给封了,是一个变态的操作,如果一
信息发布软件816商务网全自动发帖软件
816商务网全自动发帖软件,这个网站也做了两个版本,一个是低配版,POST 提交,可以自动传图,自动切换标题和内容,导入账号就可以用,另一个是能看到界面的,也是导入多标题多内容组合发出去,一个是占用资源只有几 M,一个要渲染网页 CSS 和 JS 自然要用的资源多一些,现在也是很大的证明,如果网站没有对接百度蜘蛛池的,可能收录不如普通的版本,因为他不会执行百度的那几个 JS 文件,普通版当然就是模拟发帖的,自然会执行所
信息发布软件第一枪网站发布帖子B2B网站群发工具
第一枪网站发布帖子B2B网站群发工具,这个网站和普通的 B2B 网站没有什么大的区别,注册需要上传营业执照和手机短信验证码的,比较正规的那种,这个脚本可以发展会管理,可以发资讯管理,还可以布产品信息,软件登陆有一个拖动的验证码,会比较麻烦,所以这个软件是采用了缓存登陆的方式进行,发布帖子前一定要先采集一次缓存,这样就省去了每天跑去手工登陆账号的麻烦事。导入标题好内容,这样就可以省去一些麻烦事,软件能自动组
信息发布软件搜巴巴全自动群发软件
搜巴巴全自动群发软件,这个是同城分类信息网站,这类网站是 N 年没有更新的了,虽然漏洞比较多,但现在随着病毒终结,杀软也没有再去折腾这些事,现在毒与杀是存在这种微妙的关系之中,这个网站发的是商务同类信息,其实和 B2B 网站也没有多大的区别,网站给钱就可以发帖,自己可以充值套餐,反正这些网站是收录好,就发出去让别人充值一把作为建网站的收获期吧,这类网站有的收录好,有的是收录差的,不过新网站短期爆发收录好,
信息发布软件本地生活网全自动群发软件
本地生活网全自动群发软件,这个网站是本地生活的网站,他主要是发家电维修类的内容比较多一些,还有一些是商务服务类的信息,这类网站现在收录好的,也就那么几个,后来者往往很难居上了,他们都大多数是收费模式,给多少钱发多少帖一天。网站登陆是普通汉字验证码,发帖有分类,电话号码和发帖标题已经调用在标题上面了,发多少帖子这个按钮调用也是有用的,简介和地址分别有列表调用,你只需要导入进去就可以了,这个上传图片也
群发软件首码项目网发布宣传软件
首码项目网全自动发帖软件,这个网站是一种后台头条模式的,他有点像 ZBLOG 形式,很多人是没有啥动力放弃一些收录不好的网站,而总是舍又不舍得,放弃又还是在发帖,变成了一个一个背包,越积越多,效果越差,这里建议的是,三个月收录不好的网站就扔了,你可以很多模板,有时候你做对了很多事情,但因为百度蜘蛛就是和你斗气,看不上你的域名,看不上你的服务器,就会不收录,是完全不收录的那种状态。那就果断换域名,换服务器
群发软件天龙新闻网站B2B网站群发工具
天龙新闻网全自动群发工具,这个网站 POST 版本会比较容易提交,他有二个分类,一个是资讯管理,一个是文章管理,现在这些网站基本是发几百条后,有几条是收录好的,原因不言自明,发的多了自然就有可能被收录,没有什么大的技巧,对于百度来说,这类广告信息太多了,他肯定要随机选几个收录到自己数据库中的,几乎没有什么悬念的事,而对于发的人来说,只能发大点量,提高自己被成为天选之子的好处吧,如果选不中,那就继续发,或
群发软件一路供应网站发布宣传软件
一路供应网站全自动发帖软件,这个网站是发布供应信息软件来的,网站只有两个版块可以发,一个是文章,一个是资讯信息,其它发了也不收录,网站已经下架过去了。像这类网站信息,最好当然是用一些 GPT 写文章,生成一些原创文章收录会好一些的,可是很多人总是拿着老一套,内容就改前面一段就行,这样效果当然很差劲了,形成了一些恶性的循环环不收录的机制,除非网站有很大机率被收录,不然就很难有好运气砸中自己的,网站这里只
群发软件海威数控软件群发脚本下载地址
海威数控软件群发脚本下载地址,这个海威是一个 B2B 网站,他发帖的时候是比较慢的,所以软件准备了二个脚本,一个是 POST 提交,一个是普通网页版本,后台提交当然会快一些,而普通版收录当然好一些的,这个也是因为网站有这种梗导致需要准备两个版本,上传文件和其它网站不同,他这个记录的刻印号和别 B2B 网站不同,只是少了几个提交的字母,所以就需要改版,POST 提交是严谨的,而普通版本就没有太多讲究,啥都可以提交,就是
群发软件多宝网POST版本和普通版本一起群发软件
多宝网POST版本和普通版本一起群发软件,这个软件版本分了两个版本,一个版本是底层提交的,这样就不会占用电脑网络和电源 CPU 的资源,他用的量是极少的,对于差的电脑会有更兼容的运行效果,另一个是普通网页版本,这个版本对收录会有一定的优势,但会资源消耗的会比较多一些,同是一个网站整了两个版本也不过是客户要求的罢了,他有一个电脑比较差,又要挂上几十个脚本,那就只好用这种版本的提交方式了,这个版本上传图片这些
群发软件桂林生活网全自动论坛群发软件
桂林生活网全自动论坛群发软件,这个网站是发生活信息的,有点像是二手车房产之类的网站,不过他是论坛改版的,功能并不会有多少,他分类信息这些也有很多的改变,登陆是拖动验证码,发成功帖子后,就可以自动的提示审核的节奏效果,网站登陆验证码需要用录像的效果进行拖动,不然下次他有可能会拖动不成功,下拉选择这些电话号码这些可以自由更改成自己的,分类地区选择的是七星区,下拉这些是固定的,没有做自动变换, 些都没有
群发软件快手图文群发软件
快手图文群发软件,快手又有重大升级,不得不把这个脚本软件给改一下,这个是发图文的软件,用缓存登陆一下账号,姓名这里已经改版,采集缓存有所变化,所以重做了一个步骤,上传图文这里已经不可以出直接用访问网址了,只能打开网页,然后点击一下上传图片才可以传成功图片,其实上传图文这里,最大的不同就是图片上传几张,现在可以上传十多张网站会自动帮你转换成视频,然后软件就是帮你上传上去,标题也帮你输入进去,他这个加
群发软件免费蜘蛛池效果软件下载
免费蜘蛛池效果软件下载,这些蜘蛛池都是几亿收录效果的超级网站,他们也是得益于网站主是一个钱爸爸,因为他们的硬盘能装这么多的东西,也是超级无敌的冤大头罢了,随着发的人越来越多,他们发展效果自然也不在话下,能有一个超级大的留存力度,虽然看上去是没有什么人去,可是收录也会因为水涨船自然高的样子存在,网站有的有验证码,有的没有,这里收录十一个最好效果的网站放在那里,有的网站可能随后会标为不稳定,但也没有办
群发软件百家号个主页宣传软件
百家号个主页宣传软件,他这里主要是导入账号,然后修改个性签名,修改自己账号名称,生成一个主要进行操作的,这个一直都有人在弄这些数据的改变,不过他这个前详细说明,似乎要通过实名认证才可以填入,名称是随便一天可以改三次,这个操作虽然很费账号,但效果也是很显然的,毕竟是百度自己家的东西,只要你有蜘蛛池,丢进去,百分之五十的机率都会被收录,而且这种操作排名也是相当高的,只要不被提示,几乎很久都会存在于快照
群发软件咪咕创作者平台自动上传软件下载地址
咪咕创作者平台自动上传软件下载地址,这个网站是自动上传内容的网站,有点像是头条网站,有点像是发视频音乐的网站,他这个网站缓存会比较难弄,需要用 JS 的模式写入,不然就会无法写入缓存的,而且需要清空,不清空会直接给断开链接,不能直接写入缓存,上传好文件,就可以输入标题和描述内容了,看上去很容易,实也示做起来一点也不轻松,他妥妥的要点时间去写好动作才可以自动发帖的,分类这里会比较麻烦,需要用键盘按下键才
群发软件YX工具站全自动群发软件
YX工具站全自动群发软件,这个网站是一种导航网站,和一些装系统的工具盘类似的,网站用一种流量拉高自己网站排名的形式进行发展,先是打开首页,你不知道后台得和他买号会发给你,不过脚本软件都是通用的,打开登陆接口,登陆好账号,后面就可以访问发帖投稿的网址,打开输入标题和内容就可以发帖,其实是和先前的那几个什么首码网站是一样的,他网站也有做好这里的友情链接在里面进行扩展,网站开始收录好,后面就不知道了,毕竟
群发软件AR首码网全自动发帖软件
AR首码网全自动发帖软件,AR首码网全自动发帖软件是一款专为网络营销人员设计的强大工具,它不仅能够极大地提高工作效率,还能在一定程度上帮助企业或个人实现信息的快速传播。随着互联网技术的发展,特别是社交媒体平台的兴起,如何高效地管理和利用这些平台成为了众多企业和营销人士关注的重点之一。正是基于这样的背景,AR首码网全自动发帖软件应运而生,旨在通过自动化技术解决传统手动发布内容时所面临的时间成本高、效率低下
群发软件百度AI高光视频剪切群发工具
百度AI高光视频剪切自动发百家号网站软件,这个百度 AI 视频已经运作了一段时间了,虽然总是卡来卡去的,但起码人家还是能顶一点事的,不管怎么样,还是很多挂羊头卖狗肉的产品可以发布,比如这个你丢了下视频给他,他会自动把你视频段割出来,然后自动发到百家号,居然几乎不用审核就出来了,你以为他们用的是很好,其实他们是为了审核通过罢了,这样发出去省时省力,这个软件就起到这种作用,但他剪切的是很慢的,有的要三分钟之
群发软件优秀网全自动群发软件
优秀网全自动群发软件,这个网站是充值后台的发帖形式,如果不会找网站发帖,这类网站其实已经集中了 N 多个网站放在了后台供选择发帖了,人家也是真正钞票,把网站给做起来的,你也不要怪别人商人目的性强,毕竟都是一分钱一份货的买卖,他们收录好,你认真的发帖,也算是一件不可多得的好事放在那里了。你还有什么可以失落的事呢,网站分类这个点击全部放到了列表了,有不想发的分类可以自己去删掉就行,没有什么难度的,不过网
群发软件搜狐博客群发软件
搜狐博客群发软件,这些偶断丝链的博客也是极度让人怀念的,这不,搜狐博客又来了第二春,现在的收录确实是比以前几十年的收录更加好,他们全部都是一种怀旧的形式的活着,但也不是很乐观的样子,因为他们配置的服务器可能只有一台老掉牙的托管源,你也不用想着他能有多快提交,他们也总是会一卡一卡的样子呈现在那里,发帖如果出验证码就歇菜,不是软件不能识别,而是网站他转几下验证码都不知道在哪里,然后图片就碎在那里了,这
群发软件咔嚓娱乐网全自动发布帖子软件
咔嚓娱乐网全自动发布帖子软件,这个网站是一种后台登陆方式进行发帖的,他登陆有一个验证码,后台是头条形式,你充值给网站就可以发帖,注册进去后可以自主注册账号,但免费账号是发不了帖子的,这类网站可以说有几个之多,他们都有的是养网站的,把好的挑出来卖账号,把差的扔进沉默成本里了,这类网站发帖是比较简单的,他点击下拉这里,已经全部放到了变量增加区里进行更换了,这样就不会把分类全部雷同,全部可以自由更换的,
群发软件小红书视频批量上传软件下载地址
小红书自动发布视软件下载,这个网站图文发的人是比较多的,不过视频现在也可以,只是他网站现在在逐渐改版中,现在他网页进去后会有一层的透明的 DIV 层,你如果不点击一下,会以为软件失效了,这个网脚本是用缓存登陆好,然后进去后用座标点击一下视频二字,再去判断账号登陆成功了没有,有没有提示要绑定手机验证码,有没有登陆成功,三个判断,再上传视频,下拉标签这些功能,他网站这里需要用复制和粘帖功能,才可以实现内容
群发软件温江直聘网站全自动发帖软件
温江直聘网站全自动发帖软件,这个网站也是发普工类信息的网站,网站不用登陆账号和密码,也不用自己注册,只需要打开发帖页面,输入标题和内容就可以全自动的完成发帖,发帖的时候注意右上角采集的标记,他是帮助你采集到发帖链接的作用,右上角也有一个手机号码,要改成自己的哦,看很多傻家伙,一直放着默认的联系方式拼了老命的发帖,这不是有点笨吗,那个是默认的设置,需要导入自己的广告标题和广告内容,联系方式,进行发帖
群发软件拓英人才网全自动发布帖子软件
拓英人才网全自动发布帖子软件,这个网站是人才网来的,一般也叫普工发布网站,网站就一个输入密码就行,根本不用手机号和验证码,非常多人发,发的标记要填好,不然是采集不回来自己帖子的。这类网站权重其实很低的,但也架不住无限的刷帖子,然后把链接采集回来,提交给百度蜘蛛池那边的,只要发的链接够,收录其实很轻轻松松的,只是很多家伙太不懂得宣传的底层逻辑了,他们往往就几个内容,拼了老命的发,也不知道让人工智能多
群发软件单县招聘网全自动群发软件
单县招聘网全自动群发软件,这个网站就是发招聘信息的,最好的方式是他不用整手机号码了,现在的一大趋势,因为方便才是真材实料的利好,网站一个普通的验证码,就可以直接发帖,填上姓名,作为标题,简介作为内容就可以发布成功,发成功后,需要自己填一个标题的标记,比如标题或是联系方式,填上自己手机号码,这样就可以只采到自己的网址,不会采到别人的网址了,采好的链接可以放到蜘蛛池里自己作为收录点,疯狂的发送起来,先
群发软件天涯生活网全自动群发软件
天涯生活网全自动群发软件,这个是 B2B 网站来的,后台都是一样,但网站可能自己也不知道,他把分类这些项目给弄错了,导致很多都错位了,他这个版块发的是 25 后面的去了,网站只有两个分类收录比较好,一个是资讯管理,一个是文章管理,其它什么问答管理和生活管理基本没有收录,这个脚本在逻辑判断进入分类里进行了调整,因为不调的话他就会发不了,因为他这些分类的汉字给改了,所以和别的网站不,不改是铁定发不了帖子的,这
群发软件印象首码网全自动发帖软件
印象首码网全自动发帖软件,这个网站是一种后台付费发送模式,先前这类网站发啥都能秒收录,他是一种头条形式的网站,也因为收录好吧,所以很多人弄了这类网站批量生产内容,然后把收录好的网站给都给留下来了,这类网站后台还是比较强大的,充值后就可以自动开通 VIP 直接可以发,进入后台就是输入标题内容就可以发送成功,不过他每一个网站的分类会有所区别,发分类的时候,需要自己加一个点击一下才可以分类选择成功,网站这个
群发软件易次元工作室全自动创建工具
易次元工作室自动创建工具下载,这个网站是网易的动漫网站,不变的趋势吧,这么多人待在上面玩游戏,看动漫,估计一有点时间也会在里面浪费掉了,网站可以发帖,但发帖容易封号,我看他不如去创建一个工作项目比较靠谱,这里给标题给简介,而封号少还给单独的链接,给我们有宣传发帖的空间,项目创建一个就可以采集回来链接,还是很容易发成功的,没有验证码,缓存登陆网站的。 易次元工作室全自动创建工具下载地址:
群发软件精英论坛俱乐部论坛自动发布帖子软件
精英论坛俱乐部论坛发帖软件,这个网站注册账号后要 48 小时才可以发帖成功,是台湾那边的网站,网站论坛是很老的效果了,不过他里面有 N 多款游戏,还是一个很多人聚餐的地方,发帖没有验证码,注册账号有手机验证码和邮箱注册,注册成功的验证码,和登陆的验证码位数是不同的,这个要注意,网站发帖的时候比较简单,就输入标题和内容就可以成功完成,没有什么大的限制,但发广告还是会被抓到封号的,这个网站属于快餐文化,可不
群发软件优秀网全自动群发软件
优秀网全自动群发软件,这类网站有的收录极好,全部超出了你的想象力,不过这类网站收录信息都是收费的,他们用的是站群形式,总有那么几个网站表现的会极其优秀的呈现,网站登陆后台就可以发帖,前台是一种投稿形式主义,发帖只要输入标题和内容,还有一个分类也放在了我们软件列表上了,这样就可以随时更改,出问题也容易纠正,这类网站都是自研平台,BUG 肯定是有很多的,好在发帖验证码他没有上 BUG,不然就要额外的费用了,发
群发软件搜巴巴分类信息网全自动发帖软件
搜巴巴分类信息网全自动发帖软件,这个分类信息网站可以免费发帖,但是网站对免费账号是有限制的。付费账号发的帖子就比较多,发的多收费自然也会比较高的,首页发帖要先绑定好手机号码,他注册如果是邮箱,就要自己去绑定一下手机号码,如果不是就不用绑定,可以手机验证码直接注册账号,分类可以在第二个访问网址动作自行更改的,没有什么大的限制,就是他这个上传图片总是会卡在那里,没在特别需要可以不传,标题内容导入就可以
群发软件精英乒乓网自动论坛发帖软件
精英乒乓网全自动论坛发帖工具,这个是一个普通的论坛,看很多人都几乎把网址给堆满了天,收录还是蛮好的,只是他注册账号是容易的,但注册成功后要手机验证码绑定一下账号才可以用,不然是发不了帖子,登陆的时候会有一个动态的验证码,只能用截图然后识别发帖,发帖还有一个动态图片验证码,需要识别成功才可以发帖成功的,基本用火眼就可以发成功就是步骤会有点多而已做好已经是三十多步的格局在里面了。这个截图发验证码的,不
群发软件杜桥东部人才普工群发
杜桥东部人才普工群发,这个网站每发一条帖子需要短信验证码,软件已经对接好网页验证码的获取平台,自己打上平台账号就可以,现在他那个 API 接口账号和密码已经更改了,要注意自己获取到来,更改后全部会变,软件这里的账号密码不是登陆账号,是他平台的 API 特有的账号密码才可以用的。这个平台发帖的,现在没有其它验证码的,还是比较方便发帖的,短信验证码其实只能用一次,因为是共享的平台,你也不知道别人用它手机号码发了
群发软件天天洁日志自动发布软件
天天洁日志自动发布软件,这个网站是自动转发采集那个绿猫网日志的,以前有这个脚本,很多人让我找这个天天洁的发布日志网址在哪里,我看了一下我用以前天天猫的网站也是可以登陆的,发布日志后,他几个小时才能同步过去,怪不得绿猫网会有这么好的收录量,原因就是因为他还有很多未知的网站转发了他发的日志,以前就很多网站为了拉自己主网站,偷偷自己弄了一些小网站转发里面的日志,而以前蜘蛛又比较天真可爱,所以就可以拉高了
群发软件京东私信群发软件
京东私信群发软件,京东对账号管得还是很严格的,可是也是一个发私信的好地方,这个脚本是通过对店铺信息采集,然后自动跳到商家地址去自动采集发信息的,所有功能都分开了,采集是按关键字进行采集的,然后逐个的自动发信息,软件能自动的切换账号,自动跳到他网站又会重新开始发帖,网站开始是没有什么大的限制,但疲举报后会被禁言,有购买记录的号会比较耐用,原理自然就是有纠纷的更加耐用了,网站账号可以导入网页的账号缓存
群发软件小红书全自动图文软件新版推荐
小红书全自动图文软件,由于小红书有所改动,特别更新一下小红书软件,小红书这个输入内容现在只能用复制文本,再贴进去,不然他会说你没有输入内容的,网站没有什么大的限制,就是发非法的东东肯定封号的事,图文一般都是比较好的流量,视频这些流量会相对质量没有那么高,都是卖货的多吧,图文这个一般是先传图片几张后,他会自动合成一种视频格式的播放模式,再加上一些文字作为段落的,网站对于发帖还是比较友好的,可以做百度
群发软件搜购网全自动发帖软件
搜购网全自动发帖软件,这个网站是 B2B 网站来的,发的人也是很多,要注意一个问题是你登陆的时候千万不要输入错误的密码,不然多次后,发帖都会有验证码,这就特别的烧钱,要是遇到这个事情也不用太担心,你只需要换一个 IP 就可以避免验证码的出现,不然就得等 48 小时再消失这个验证码的,这个得注意操作哈,网站是要付费账号才让发帖,免费号基本不让发帖,不然也会安上验证码,打码的钱算起来也够买他网 VIP 了,网站后台会有
群发软件爱卡车评论软件
爱卡车评论软件,这个网站还是爱车一派的最爱网站,发头条是可以秒收录的,不过评论还是靠刷的多,当然正规的评论也是可以上去的,虽然网站说要审核,评论最大的问题就是看上去上去了,一会又被删除的可能,网站过滤一遍,判断 IP 判断内容,判断账号频繁度,就给你安排存还是减的命运,不过量多了,总是会有很多漏网之鱼,有的人偏爱瞎看的,一条好内容往往都会带有 N 多评论,这样有利于自己主帖的排名,曝光度的呈现,都是很有
群发软件中国混凝土网站注册账号个人主页宣传页面
中国混凝土网站注册账号个人主页宣传方式,这个网站是很麻烦的 B2B 网站注册网页,不过只要完善好主页所有信息后,就可以无碍的开启主页作为宣传点,企业名作为关键字,简介作为发帖内容,是一个很不错的宣传点,注册的时候只有一个普通的字母验证码,其它几乎没有什么难度,就是步骤有点多,全部要填上才可以的,网站现在开放状态,不用换 IP,一个就可以无限的注册成功,注册成功填完所有信息后,软件可以自动的保留链接到记事本
群发软件16DS网站自动群发软件
16DS网站自动群发软件,这个网站是一种化工网站来的,可以发布商品,也可以发布帖子,一般号只能发帖子,收录还是可以的,不过一个号只能发三帖子,你要大量发帖,需要在账号列表放多一些账号去,不然是发不了太多帖子的,不知道网站 VIP 服务是多少帖子了,估计也是便宜货,毕竟全部是自己源码开发的网站,还是有价格的,软件现在设置的是发三个帖子就自动换号,要是没有号就只能发三帖子,收录概率不会很高,也会有收录,只是效
群发软件化工综合服务商网站全自动发布帖子
化工综合服务商全自动发帖软件,这个网站秒收录是比较高的,这个网站注册账号有几十项要填写的,非常试,不过也没有办法,人家的规则就是这样子,不知道是不是付费网站来的,反正登陆账号也是可以发招聘信息的,可是我看他们秒发秒收录,也不知道怎么整出来的,普通账号是每发一帖就会提示审核中,每一个帖子都要审核,可明明别人秒发就可以不用什么审核,全部都多数是秒收录上去的,收录可谓不是说不好,而是太牛了,虽然是化工网
群发软件电子工程世界论坛自动发布帖子软件
电子工程世界论坛自动发布帖子软件,这个网站注册账号会比较麻烦一些,他是先关注网站的公众号,然后公众号自动发一条短信给你手机验证码,才可以注册成功账号,注册成功的账号还要填账号密码信息,才可以注册成功,成功后还要等上五分钟,新账号才可以发帖的,不过这个论坛收录是一般的好,几乎都是秒收录的盛况。导入标题关键字到标题列表,软件会按列表从上往下自动切换着发,内容也是一样,想通过组合就放多个内容列表中去,如
群发软件领动商务网发布宣传软件
领动商务网全自动 B2B 网站群发软件,这个网站是 B2B 网站,他后台也有很多网站可以发,自己看哪一个对自己关键字收录好的才去买号发,这个网站脚本只要导入标题和内容就可以全自动发帖,没有什么难度的,什么都可以发,不过搜狗收录比较多,其它收录很差劲的,图片需要导入到图片列表,关键字可以导入标题 1 也可以导入标题 2 二个列表进行组合,内容也是一样的,多导入不同的内容有助于收录,现在都人工智能时代了,不要总是弄几
群发软件天涯生活网全自动发帖软件
天涯生活网全自动发帖软件,这个网站后台有几百个网站供选择发帖的,有的收录好, 有的收录差,看菜可以下饭的网站,给钱买一个套餐发帖卡,就可以无限的发帖了,有的网站是扣点的,就是每发一个帖子,就可以发多少帖,有的是套餐的,什么样的账号一个月可以发多少个帖子的形式,这个网站后台的文字改了,弄的后面不能通用的发帖了,他把生活必需用的关键字调用在那里,看上去当然很麻烦了,不过只做好一次就可以自动发帖了,也没
群发软件78动漫网发布宣传软件下载
78 动漫网全自动发帖软件,这个网站注册的时候需要短信验证码,注册好后就可以用账号密码登陆网站,软件是自动登陆的,导入标题内容到软件里,就可以自动发帖,发帖步骤会有点烦,要选择话题,选择分类,还要选择版块,他发帖地址全部是统一的,只有版块和话题这些是动态的,选择哪一个就可以发到哪一个版块去,软件这里是集中发到他高达的这个版块里面去的,发哪都一样,收录是比较好的,大动漫现在还有很多人喜欢追,毕竟抓人眼
群发软件混凝土网站自动B2B网站注册软件
混凝土网站自动B2B网站注册软件,这个网站是 B2B 网站后台,看上去是大站,实际全部是站群类似的,网站就是注册一个账号,然后让你输入标题,再输入公司简介,作为宣传的关键字和联系方式作为基准点的,注册的时候有一个算术验证码,软件可以自动计算出来,还有一个字母验证码,自己用火眼就可以过完,挂在那里也可以每天注册几万个账号的,然后通过收录最大取胜,后台填写也没有验证码,比较省钱的那种,不限制 IP,注册长久存活
群发软件宁美母婴论坛全自动发帖软件
宁美母婴论坛全自动发帖软件,这个网站有的人打开会很慢,有时候会很快,全看自己运气了,有的人可以发日志的,可以跑去发日志,不过论坛收录会高一些的,一般都发论坛,这个网站是不能用什么常规思维去搞的,他网站看上去是注册账号的,但注册账号并不能发帖成功,发邮件这些也是收不到的,直接用 QQ 号登陆,点一下 QQ 号登陆,然后把缓存放到软件里才是最优的方法,也可以用微信搜码登陆,微信搜码登陆只能保留缓存一天,QQ 号
群发软件揭阳招聘网站自动发普工信息软件
揭阳招聘网站自动发普工信息软件,这个网站是免费发广告的网站,他都是需要短信验证码解码后才可以发送,这种网站不用注册账号,只需要付出几个短信验证码就可以完美的发帖成功,收录还很牛的样子哦,只是现在短信平台总是改来改去的,就有点麻烦,但做好一次就可以疯狂发送也是很值当的,网站是网页发帖的形式,自己导入好关键字作为标题,这个是输入姓名和工作名称里去的,内容就是直接输入简介里的,为了方便收录,这个每一个号
群发软件第一枪B2B网站自动发布宣传软件
第一枪B2B网站全自动发送帖子软件,这个是 B2B 网站后台,比较复杂,不过你要是用缓存写入他的登陆方式就简单太多了,这个是通用脚本,按客户的思路定制的,先是用缓存登陆网站,然后打开产品和资讯的发送网页,输入标题,清空内容,为什么他网站要有一部清空呢,原因是网站他自动会给你上一段内部的内容例子,你还必须去清空,不然他就会在你输入内容的后头里呆着,手工发的时候你感觉不到,因为一点,会自动消失,软件点不行,只
群发软件脉脉专栏网站自动群发工具下载地址
脉脉专栏自动发帖软件,脉脉这些大网站都基本有头条专栏的,而且都只能发正规的内容,他一般都需要审核的,账号也比较难搞到,发的人不多,可收录会比别的都好,他们都限制发多少,所以这个脚本都做了发帖切换账号的功能,发多少就切换一次账号,这样正规的内容一般都可以无限的循环发帖,加上现在智能人工写文章,其实收录会很吓人的,内容这里是图文并茂在一起的,图片上传了两张,是用 POST 上传的,看不到过程,调用是图片变量
群发软件小站教育全自动注册发提问软件
小站教育全自动注册发提问软件,这个网站一个手机号码一个验证码,只能注册一个号,成本比较大,但效果也是蛮好的,注册有一个字母验证码,一个短信验证码,软件全自动完成,注册的时候用户名不能超过 10 个字,软件用户名是调用标题 1 提问的时候是调用总标题总内容的,注册成功后,软件会自动去发一条提问,因为你到时收录的是个人主页,有一条提问,就有了联系方式,有了联系方式就在了关键字,有了关键字就有了内容,这些都是
群发软件弈城围棋论坛全自动发帖工具
弈城围棋论坛全自动发帖工具,这个网站是学棋的,现在素质教育成了很多人消费的场所,有人气的地方就有江湖,所以收录都不会差到哪去,他们往往就是百度蜘蛛看热闹的地方,哪怕是论坛有几个人对骂吵架,都成了它爱去的场所,带来了吃瓜群众的心情。这个论坛发帖没有验证码,注册一个简单的验证码,注册成功就可以发帖,没有啥限制,因为是论坛来的,所以发帖数量可能会被有限制,软件可以设置多少帖就换一个账号的。其它不用设置什
群发软件奇幻世界社区发帖软件
奇幻世界社区发帖软件,这个是繁体网站只是一个游戏论坛,估计是台湾省那边的主题网站,游戏不知道有没有人玩,看收录还是可以的,注册账号有一个验证码,看的不是很清楚,不过随便输入就可以注册成功,网站写的比较差劲,但还是可以有收录的,自创论坛就是这个模样的多,这些字体也比较难看得出来,好在猜也可以猜出点意思,发帖自然也能发出去的。这个软件写了登陆步骤,可以自己换号,发帖成功,也有采集成功网址到记事本里,自
群发软件OAWXW复印机维修论坛全自动发帖软件
OAWXW复印机维修论坛全自动发帖软件,这个网站是类坛来的,需要用微信关注他的公众号,才可以进行发帖,注册成功网站账号后,还要手机验证码一次,才可以发帖,这个脚本是用缓存 CK 进行登陆的,采集的时候只能用两个参数,不然网站采集回来的缓存是最后对不上发帖的那二个验证码的,一个是算术的,一个是汉字的验证码,这种汉字验证码只能用火眼去打码,不然失败率高,自动的识别率不高,当然现在人工智能还是可以的,就是还蛮贵
群发软件易次元网站自动刷帖子软件
易次元网站自动发布帖子软件,这个网站现在还是很多人跑去玩的,所以收录肯定都是秒收录的,像网易的网站,大多数都是各种各样的验证码,各种各样的邮箱验证的,看上去安全策略够高了,可在人工智能打击下,他的验证码都已成摆放了,这个网站发帖可以秒收录的,但新号可能要审核一次验证码,登陆是用缓存的,没有买到 CK 号就只能自己先把号全部登陆一次,软件可以点击采集缓存按钮,就可以全部缓存到碗里去的。发帖内容只能用键盘
群发软件汽车之家头条号自动发帖软件
汽车之家头条号自动发帖软件,这个网站登陆有验证码,所以脚本写成了用缓存登陆,这样切换账号,就可以方便一些,每天也不用自己手工登陆,蛮方便的操作了,网站标题需要模拟键盘输入的方法,而内容需要用粘帖的方法进行操作,不然标题会没有输入成功,内容也会没有格式,他的这个内容图片会比较特别,需要用他网站的一种 IMG 标签,不然你粘进去的图片也会只有源码,但是用他网站格式的图片,就会很顺利的发成功,封面图片也能自
群发软件vk网站自动创建社区自动发帖软件
vk网站自动创建社区自动发帖软件,以前 VK 网站一直不给登陆账号了,现在又有人弄了一种超级缓存账号来登陆创建社区,然后自动发帖,这个脚本也是这样,最后还可以采集出来帖子网址扔蜘蛛池,完美的操作,这种号发多了也没有验证码,不知道他们在哪弄的,不过只要有缓存就可以用这个脚本,自动的登陆自动的发帖,你用这个脚本只需要导入标题内容和账号就可以,注意,账号是缓存形式,你要是几个号的,没有缓存,就自己登陆一下,点
群发软件临时工网站自动发帖手机版软件
临时工全自动群发软件,这个网站是一种手机网页来的,倒计时会比较多,你不点击他一些比如姓名,工作地区的选择,不点它是不加载的,加载要一点点时间,对于这个脚本来说,很多动作都需要加点倒计时,不然运行太快会导致发不成功的,不是说没有选择这个,就是那个,他这个介绍,更是弹窗的方式才可以输入的,其它还好,不过网站要手机验证码的,软件全部流程做好了,只要自己弄好短信平台账号到软件里面就可以全自动的运行下去,网
群发软件学习使我快乐自动注册软件
学习使我快乐自动注册软件,这个网站听起来会不会比较鸡血,不过人家就好这口,你也无能为力,网站注册很简单,用软件自带的邮箱账号就可以无限的注册,收到激活码一填就完成任务了,网站可以标题填写成昵称,介绍可以做成内容,这些都可以无限的注册,也不封 IP,没有什么限制,有蜘蛛池的大家们,可以工作优化对待这个网站的,网站收录还可以的,个人中心页收录了也很多,有先见之明,全部都不错的存在了,注册成功保留了网址,
群发软件分析百科网站网自动注册个人主页群发软件
分析百科网站网站自动注册个人主页宣传方式,这个网站是注册账号的,本来先前还可以发日志的,网站数据库的姓名没有改,所以发不了帖子了,密码对应不上,存不了数据的 BUG ,所有内容都不可以输入,但是标题可以,所有标题不超过二十个字,都能让网站存档的,这个是网站的 BUG,没有办法解决,解决这个网站也不存在了吧,注册账号有字母验证码,要短信才可以注册成功,宣传主页,只能填个人中心的标题,带上联系方式和关键字,收

QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2024-11-23 21:25 , Processed in 0.388197 second(s), 57 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

快速回复 返回顶部 返回列表