NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 12198|回复: 8
打印 上一主题 下一主题

[VB & C#] 关于 gh里重载sub new() 的说明

[复制链接]
跳转到指定楼层
m
发表于 2010-4-11 00:37:38 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
先看一篇文章 New方法 就象Sub Main,Class_Initialize是在其它VB6类中的代码运行之前被调用的。此外,它是在错误处理之前被调用的,所以使得调试变得很难,而错误作为一般的错误显示在客户端来实例化对象。另外地,Class_Initialize不用参数,这意味着在VB6中没有方法可以在对象被创建的时候用数据来进行初始化。 VB.NET剔除了Class_Initialize而采用完整的构造函数方法。这个构造函数有完整的错误处理能力以及可以接收参数。所以我们可以在创建对象的时候来对它们进行初始化,这是VB.NET一个十分重要的特性。VB.NET中构造函数方法是Sub New。 Public Class TheClass Public Sub New() (在这里初始化对象) End Sub End Class 利用这种类型的构造函数,可以如下创建类的实例: Dim obj As New TheClass() 这个例子类似于在Class_Initialize创建一个VB6代码。 但是,经常地,我们在创建对象的时候往往要用数据来初始化对象。我们可以从数据库中来装载一些数据,或者我们可以直接为对象提供数据。不管用什么方法,我们是想在对象被创建的时候为它提供一些数据。 为了做到这点,可以增加参数列表给New方法: Public Class TheClass Public Sub New(ByVal ID As Integer) (在这里使用ID数值来初始化对象) End Sub End Class 现在我们来创建类的一个实例,并且为对象提供数据,代码如下: Dim obj As New TheClass(42) 为了增加灵活型,我们可以接收可选的参数数值。为了实现这个,可以有两种方法:通过使用Optional关键字来声明一个可选择的参数,或者通过重载New方法。为了使用Optional关键字,我们简单地声明可选择的参数,代码如下: Public Sub New(Optional ByVal ID As Integer = -1) If ID = -1 Then (这里可以初始化对象) Else (这里可以使用ID数值来初始化对象) End If End Sub 这种方法太过于理想化了,但是,既然我们不得不检查是否参数是(不是)已经提供,然后决定怎样初始化对象。New方法又两个方法可以实现。第一种是对于每种行为类型而言的,它可以通过重载来实现: Public Overloads Sub New() (这里可以初始化对象) End Sub Public Overloads Sub New(ByVal ID As Integer) (这里可以使用ID数值来初始化对象) End Sub 这种方法不仅可以避免有条件的检查以及简化了代码,而且它还使得对于客户代码对象的使用都变得更清晰。这个重载New方法可以使用参数也可以不用参数,有更大的灵活性。 实际上,通过重载,我们可以创建许多不同的构造函数,也可以利用许多种不同的方法来初始化我们的对象。

评分

参与人数 1强度 +3 照度 +30 收起 理由
skywoolf + 3 + 30

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
8m
发表于 2012-5-25 12:40:45 | 只看该作者
看不懂啊……
7m
发表于 2012-4-28 20:14:47 | 只看该作者
感谢分享啊。
6m
发表于 2012-4-28 14:55:44 | 只看该作者
感谢分享啊。 感谢。
5m
发表于 2012-4-28 14:29:24 | 只看该作者
感谢分享啊。
4m
发表于 2011-10-11 23:54:00 | 只看该作者
很有用处啊
3m
发表于 2011-10-11 18:02:40 | 只看该作者
真心看不懂。。。。。。。。
2m
 楼主| 发表于 2010-4-11 00:50:44 | 只看该作者
我尝试调用了一下 如 dim PT as new MyPt 或 dim PT as new MyPt(X) MyPt是自己定义的一个class 感觉很正常 没有报错 但是 如果属性要重载 一定要用overloads 另外不建议大家定义一些public ,鬼知道GH vb.net 什么时候回收垃圾 说实在话 gh做oop还是比较卡的 回帖说不懂的 就去看看以前发在VB&C#版块的帖子 现在发帖所谈的问题是越来越细 不看懂以前的帖子肯定不知所云
1m
 楼主| 发表于 2010-4-11 00:41:17 | 只看该作者
本帖最后由 panhao1 于 2010-4-11 00:54 编辑 到GH里面 上面说的行不通了 编辑器一再提示 new()是不需要重载的 也就是说 可以写成 sub new() end sub sub new(X) ’X为输入参数 (运算过程) end sub 看很多教程里 sub new() ’参数缺省 (这里一般会有description) end sub 但是参考C#这里的description完全可以不写

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-11-23 04:05 , Processed in 0.060264 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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