好了,到这里,你不想看看完整的例子吗?这里重新写了一个human类,当中有一个age(年龄)属性。我们看看它是怎样阻止把一个人的年龄设为负值的: imports system
public module mymodule sub main dim laowang as new human laowang.name = "老王" laowang.age = 52 laowang.age = 330 '这句话有没有把老王的年龄设为330岁呢?看看下一句的结果就知道了。 console.writeline("{0}现在{1}岁。", laowang.name, laowang.age) console.readline() end sub end module
public class human public name as string dim mvarage as integer '这里没有指明是public还是private,因为缺省状态是private
public property age() as integer get return mvarage end get set(byval value as integer) if value<=0 or value>=200 then '通常年龄不应该小于1或大于200 console.writeline(value & "岁?我死了吗?") else mvarage = value end if end set end property end class
到这里你应该闭目养神一会儿:原来属性是这样子的啊!
但是话题还没有完。
比如说,如果成员是一个数组,我该怎样为它建立属性呢?为当中的每一个元素建立吗?那数组大小变化了怎么办?property才不会这么蠢。我们举个例子。比方我们给human类添加一个数组成员children,表示一个人有多少个孩子。我们先定义mvarchildren: dim mvarchildren() as human
为其建立属性有两种方式。一种是直接将属性的类型设为数组: public property children() as human() get return mvarchildren end get set(byval value as human()) mvarchildren = value end set end property
那么我们就可以像使用数组一样来使用这个属性了。
另一种是在读取属性的时候传入参数index: public property children(byval index as integer) as human get return mvarchildren(index) end get set(byval value as human) mvarchildren(index) = value end set end property
这样可以对传入的下标进行检查。 这里提到读取属性的时候可以给参数。这是很有趣的一个东西。比如老王有3个小孩,其中一个叫“王华”。我想根据名字来得到这个小孩,我可以写一个函数 public function getchildbyname(byval name as string) as human '内容省略了
然后调用 laowang.getchildbyname("王华")
就可以了。 要写成属性的话,我们可以这样写: public property child(byval name as string) as human get return getchildbyname(name) end get set(byval value as human) getchildbyname(name) = value end set end property