VB.NET类的总结(一)

Module  Module1

  
Sub  Main()
    
Dim  theFirstInstanceOfTestscope  As   New  TestScope
    theFirstInstanceOfTestscope.TestScopeSubMethodOne()
    
' TestScope.TestScopeSubMethodOne()
     Dim  aStr  As   String   =  theFirstInstanceOfTestscope.TestScopeFunctiongMethodOne()
    Console.WriteLine(aStr)
    Console.ReadLine()
  
End Sub

  
Class  TestScope
    
Dim  a  As   String   ' 同Private a As String作用一样。 类的字段(又称成员变量)默认是Private和实例类型
     Private  b  As   String
    
Public  c  As   String

    
Private   Shared  d  As   String

    
Sub   New ()  ' 无参数构造函数
       Me .a  =   " Dim_a "
      
Me .b  =   " Private_b "
      
Me .c  =   " Public_c "
      TestScope.d 
=   " Private Shared_d "
    
End Sub
    
' Public Static Sub TestScopeMethodOne()  '不能用Static去声明Sub方法(或者Sub过程),提示错误:方法不能声明为“Static”
     Public   Sub  TestScopeSubMethodOne()  ' 如果改成Private,就不能在类的外部访问
      Console.WriteLine( String .Format( " TestScopeSubMethodOne():{0} {1} {2} " , a, b, c))
      Console.WriteLine(TestScope.d) 
' 实例方法能访问Shared成员(其实就是静态成员)
       Dim  TestScopeFiled  As   New  TestScope
      TestScopeSharedSubMethodOne(TestScopeFiled)
    
End Sub
    
' Public Static Function TestScopeFunctiongMethodOne() As String  ''不能用Static去声明Function方法(或者Function函数),提示错误:方法不能声明为“Static”
     Public   Function  TestScopeFunctiongMethodOne()  As   String   ' 如果改成Private,就不能在类的外部访问
       Return   String .Format( " TestScopeFunctiongMethodOne():{0} {1} {2} " , a, b, c)
    
End Function

    
Public   Shared   Sub  TestScopeSharedSubMethodOne( ByVal  filedOne  As  TestScope)
      
' Return String.Format("TestScopeFunctiongMethodOne():{0} {1} {2}", a, b, c) '错误:    没有类的显式实例,就无法从共享方法或共享成员初始值设定项中引用该类的实例成员
       ' 这个错误和C#其实是一样的,C#允许实例方法可以访问静态方法和静态字段,但C#不允许类和结构里的静态方法去访问同一个类或结构里的实例方法和实例字段,VB.NET也遵从这个规则。
      filedOne.a  =   " 用传参数的形式调用TestScope类的实例字段 "    ' 但可以用该类的实例做为方法的参数来调用实例字段和实例方法
       Dim  sharedMethodFiled  As   String   =  filedOne.TestScopeFunctiongMethodOne()  ' 但可以用该类的实例做为方法的参数来调用实例字段和实例方法
      Console.WriteLine( " {0}/{1} " , filedOne.a, sharedMethodFiled)
      
' fileOne.TestScopeSubMethodOne() 
      Console.WriteLine( " TestScopeFunctiongSharedMethodOne " )

      
Dim  anotherFiled  As   New  TestScope   ' 还可以通过在静态方法中实例化该类来调用该类的实例字段
      Console.WriteLine(anotherFiled)     ' 这个方法会用重载的ToString方法来打印该对象

    
End Sub
    
Public   Overrides   Function  ToString()  As   String
      
' Return MyBase.ToString()
       Return   String .Format( " {0}::{1}::{2} " , a, b, c)
    
End Function
  
End Class

End Module
' '''''打印如下--------------
'
TestScopeSubMethodOne():Dim_a Private_b Public_c
'
Private Shared_d
'
用传参数的形式调用TestScope类的实例字段/TestScopeFunctiongMethodOne():用传参数的形式调用TestScope类的实例字段 Private_b Public_c
'
TestScopeFunctiongSharedMethodOne
'
Dim_a::Private_b::Public_c
'
TestScopeFunctiongMethodOne():Dim_a Private_b Public_c

' ''''----------


' 一点总结"
'
在vb.net中不能用static来声明方法(Sub和Function),并且不能用来声明成员变量,只能用来声明方法(Sub和Function)中的静态变量。   
'
shared既可以用来声明变量也可以用来声明方法,还可以用来声明成员变量,这一点刚好跟static相反。
'
vb.ne中的shared更像C#中static的作用。在vb.net中用shared声明的成员变量(字段)和方法(Sub和Function),只能用类名来访问,而不能用类的实例来访问

' 无限循环和无限递归会导致:未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值