VB类的问题
--------------------编程问答-------------------- 给人名,构造一个实例
Class People
Public peopleName As String
Sub New
peopleName = ""
End Sub
'需要写一个方法,用于获取某peopel的实例。给方法传一个人名,获取一个人的实例。
'人的名字在数据库中存储,可以省略从数据库取数据的过程,我只是想了解下这个方法应该怎么写?
End Class
Class People
Public peopleName As String
Sub New '这是默认的构造
peopleName = ""
End Sub
Sub New(ByVal name As String) '这也是构造
'添加从数据库获取数据代码
。。。
End Sub
Public Property Name() As String '利用属性
Get
Return peopleName
End Get
Set(ByVal value As String)
pName = value
'添加从数据库获取的信息
.......
End Set
End Property
End Class
调用
--------------------编程问答-------------------- 少了new
Dim p1 As People '用默认构造
p1.Name="张三" '给实例初始化
Debug.Print p1.Name
Dim p2 As People("张三") '用第二构造
Debug.Print p2.Name
Dim p1 As new People '用默认构造
Dim p2 As new People("张三") '用第二构造
--------------------编程问答-------------------- 感谢您的详细回复 --------------------编程问答-------------------- --------------------编程问答-------------------- 1F 的高人,用的是什么语言啊?
-_-!
' 新建一个类模块
' 在属性窗口中把 (名称) 从默认的类名Class1等,
' 改成 claPeople
'(或者:People 你希望的名称,只要符合命名规则)
Option Explicit
Private peopleName As String
Public Property Get Name() As String '返回属性值
Name = peopleName
End Property
Public Property Let Name(ByVal value As String)
peopleName = value
End Property
Private Sub Class_Initialize()
' 这个类似“构造函数”(注意,不是“是”)
' 实例化后,它会自动被调用
' 在这里可以对本类实例的成员变量进行初始化操作
peopleName = ""
End Sub
'Private Sub Class_Terminate()
'' 这个是“析构函数”
'' 实例被销毁前自动被调用
'' 必要时,在这儿进行资源、内存空间等的释放操作
'End Sub
' 窗体代码:
Option Explicit
Private Sub Command1_Click()
' 实例化方法一:
Dim objPeople As New claPeople
objPeople.Name = "张三"
Me.Cls
Me.Print "用法1"
Me.Print objPeople.Name
End Sub
Private Sub Command2_Click()
' 实例化方法二:
Dim objPeople As claPeople
'Dim objPeople As Object ' 也可以这样
Set objPeople = New claPeople
objPeople.Name = "张三"
Me.Cls
Me.Print "用法2"
Me.Print objPeople.Name
End Sub
--------------------编程问答-------------------- 1F 的难道是 VB.NET 的代码?
如果在类代码中,把:
Private peopleName As String
改成:
Public peopleName As String
实例化后就可以直接操作这个成员了。
简单变量、非关键的成员变量是可以这样做的。
但复杂些的类,里面有对类的行为方法有决定作用的变量,
一定要用Privete的,这样可以防止在‘使用时’,类的成员变量值被更改。
类的“属性”推荐通过类的属性函数来进行操作。
如果类的某‘属性’只有 Get 而不提供 Let ,则这个属性就是“只读”的。
还有一些复杂的‘类成员属性’,也许就只能通过属性函数来操作了。
当然,类也可以提供一些 Public 的 Function 、Sub ,通过传递的参数来操作类成员。
--------------------编程问答--------------------
和楼上说的一样,可以对成员的使用作些验证,除些之外,你还可以做些其它事。
一个意义:
你的People类中可能还有其它特征,比如性别,照片,电话号码,当你改变人名时,你肯定不希望显示的还是另一个人的性别、照片等,这些特征也应该跟着改变,这些你可以在set方法中完成;
Property(属性)的类型和存储它的成员的类型是可以不同的,
在类中你可能用0、1代表性别,而这样对于外人来说不够直观,因此你也可以利用set作些转换,使得别人可以用 Sex="男" 类似的方法赋值,尽管实际存储的是整型的;
同样的,你的类中存储的可能只是照片路径的string,但你可以通过get把他转换为Image
使用属性为对象的封装提供了极大的好处 --------------------编程问答--------------------
VB.net
唉!.net不招人待见,连VB也遭殃
其实VB.net提供的语言特性真的比VB6好得多,可惜.net --------------------编程问答-------------------- 呵呵,楼上的各位达人,感谢,我初学者,对很多东西一知半解。
我现在大概了解了上面各位说的了,现在假如有一个命题,就是构造函数只能是不带参数的New,我如何获得一个对象呢?
我把我的想法写出来,各位看看妥否(主要看GetPeople函数妥否)?
Class People
Public peopleName As String
Sub New
peopleName = ""
End Sub
Function GetPeople(n as String) as People
'因为我假使只能有一个New不带参数的构造函数,所以我先创建一个准备返回的People,不知这里思路对不
Dim p as New People
'从数据库查找n名称的人,将属性赋值给p
Set GetPeople = p '将p当做函数返回值返回
End Function
Public Property Name() As String '利用属性
Get
Return peopleName
End Get
Set(ByVal value As String)
pName = value
'添加从数据库获取的信息
.......
End Set
End Property
End Class
--------------------编程问答-------------------- 最主要的问题是,我现在假使只能有一个Sub New不带参数的构造函数,在一个类中,想得到一个参数后查找某人,再将找到的人的对象返回给前端调用。
各位看看我上面的写法对吗,或者假使只能写一个不带参数的New,还有其他方法可以返回一个实例吗?》 --------------------编程问答-------------------- 构造函数只是为对象属性初始化提供一种方法,带参不带参无所谓;
不明白你的意图是什么,你要GetPeople得到一个实例,就得先有一个People的实例,怎么看起来像个孕妇 --------------------编程问答-------------------- 很难理解一个People(人)会提供一个得到其它People(人)的服务,如果没理解错的话,你应该是想通过"人类"来提供,那你应把GetPeople定义为静态(Shared)的,这样就可以用 类名.GetPeople来获得一个People的实例 --------------------编程问答-------------------- 我的意图就是,我现在要写一个函数,这个函数传递进去一个人名,然后再数据库中查找这个人,将人的属性提取,赋值,然后将这个人作为一个对象返回。
不知道像下面这么写可以吗,或者有没有其他方法,前提是,我不能使用New People("人名")的构造函数方式。 --------------------编程问答-------------------- --------------------编程问答-------------------- 可以的 --------------------编程问答-------------------- .net啊
补充:VB , 基础类