扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
按值传参byval,和按引用byref
创新互联建站是一家专注于做网站、网站设计与策划设计,宁德网站建设哪家好?创新互联建站做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:宁德等地区。宁德做网站价格咨询:028-86922220
vb.net里默认是byval,这和vb6不同 :)
VB.NET可选参数的默认值必须是一个常数表达式。
过程定义中跟在可选参数后的每个参数也都必须是可选的。
下面的语法显示带VB.NET可选参数的过程声明:
Sub sub name(ByVal parameter 1 As data type 1,
Optional ByVal parameter 2 As data type 2 = default value)
调用带VB.NET可选参数的过程
过程在运行时无法检测到给定的参数是否已被省略,或者调用代码是否已显式提供默认值。如果需要弄清楚这一点,可以设置一个不可能的值作为默认值。下面的过程定义了可选参数 office,并测试其默认值 QJZ 以查看它在调用中是否已被省略:
Visual Basic
Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
If office = "QJZ" Then
Debug.WriteLine("office not supplied -- using Headquarters")
office = "Headquarters" End If
' Insert code to notify headquarters or specified office.
End Sub
如果可选参数是像 String 这样的引用类型,只要它不是该变量所预期的值,就可以使用 Nothing 作为默认值。
VB.NET可选参数和重载
定义带可选参数的过程的另一种方法是使用重载。如果有一个可选参数,可以定义过程的两个重载版本,一个接受此参数,另一个则不带参数。此方法随可选参数数目的增加而变得更复杂。然而,这样做的优点是可以完全确定调用程序是否提供了每个VB.NET可选参数。
VB.NET中的Default关键字是用来声明类的默认属性的 默认属性可以直接使用“对象名(参数)”的形式来调用 而不用写出属性名
举个例子:
'先声明1个类
Public Class myclass
Dim a1 As Integer=1
Dim a2 As Integer=2
Default Public Property geta(ByVal x As Integer) As Integer
Get
If x=1 Then Return a1 Else Return a2
Set(ByVal value As Integer)
If x=1 Then a1=value Else a2=value
End Property
End Class
'这里的geta就是默认属性,后边在主函数里调用它
Public Class test
Shared Sub Main()
Dim obj As myclass=New myclass()
Console.WriteLine("{0} {1}",obj(1),obj(2))
End Sub
End Class
最后输出结果为:1 2
也就是说可以直接使用obj(1)这样的格式 而不用使用obj.geta(1)这样的格式了
注意 默认属性必须至少带有1个参数
每个参数的默认传入机制均为ByVal,这意味着过程无法更改基础变量元素。
如果不指定parametertype,则默认为Object。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流