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 中








本文转自terryli51CTO博客,原文链接: http://blog.51cto.com/terryli/520601,如需转载请自行联系原作者



相关文章
|
IDE API 开发工具
拦截|篡改|伪造.NET类库中不限于public的类和方法
本文除了回顾拦截.NET类库中的方法,实现方法参数的篡改、方法返回结果的伪造,再着重介绍.NET类库中非public类及方法如何拦截。
拦截|篡改|伪造.NET类库中不限于public的类和方法
|
1月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
30天前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
1月前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
28 0
|
3月前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
5月前
|
存储 Go C#
【.NET Core】深入理解IO之File类
【.NET Core】深入理解IO之File类
82 6
|
5月前
|
存储 开发框架 缓存
【.NET Core】你真的了解HttpRuntime类吗
【.NET Core】你真的了解HttpRuntime类吗
50 0
|
6月前
|
消息中间件
.NET 中 Channel 类简单使用
`System.Threading.Channels` 提供异步生产者-消费者数据结构,用于.NET Standard上的跨平台同步。频道实现生产者/消费者模型,允许在任务间异步传递数据。简单示例展示如何创建无界和有界频道,以及多生产者和消费者共享频道的场景。频道常用于内存中的消息队列,通过控制生产者和消费者的速率来调整系统流量。
|
6月前
|
SQL 数据库连接 数据库
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
304 0
|
开发框架 前端开发 .NET
ASP.NET Core 基础知识之​Startup 类配置
Startup 类配置服务和应用的请求管道。
154 0