一,.MSIL&CLS
.NET Framework能够识别的语言只有一种,称为MSIL---微软中间语言,这是一种带有面向对象特性的"汇编"语言,然后,为每种高级语言提供一个编译器,把由这些高级语言写成的程序翻译成MSIL语言,最后由.NET Framework执行这些MSIL代码.
为了能够正确的把这些高级语言转换成MSIL,微软规定了一个通用语言系统(Common Language System.CLS),要求所有运行在.NET平台之上的高级语言必须支持这个CLS
二, 类的构造函数与析构函数
当使用NEW创建一个类的对象时,一个特殊的Sub过程被调用,
sub new()
end sub
这个Sub过程成为类的"构造器"---Contructor,一个类可以有多个构造函数,这些函数就构成重载关系.,并且这些函数可以互相调用,在调用时有一个原则:构造函数调用作为实例构造函数中的第一条语句有效.
例如: public sub new()
end sub
public sub new(byval str as string )
myclass.new()
.................其他语句
end sub
类类型的变量都是引用类型的
有了类的创建就有类的销毁,有一个Sub Finialize()过程称为析构函数。当一个对象占用的内存要被系统回收时,.NET Framework所提供的"废品回收站"就会调用Sbu Finialize()释放对象所占用的内存。
Sub Finialize()过程可用于释放除内存以外的其他种类的系统资源。
三, 传值的两种方式(Byval&Byref)
Byval和Byref代表了两种不同的参数传送方式:传值和传址
四, 面向对象的特性
1,继承
Public Class a
end Class
public class b: inherit a 'b是a的子类,a是b的父类
end class
2,类成员的可访问性
public :可以被其他类所访问
protected : 仅可以被其子类访问,其他类都无法访问
private: 仅可以被其类本身访问,其他类都无法访问
3,覆盖: 就是由子类重新定义父类的方法
父类的方法在定义时加上 overridable,表示可被子类覆盖,也就是重新定义
而子类在重定义方法时加上 overrides 就表示重新定义父类的方法
4,屏蔽
如果子类在于父类一样的方法前面加上 shadows关键字,则称子类"屏蔽"父类的方法
当子类屏蔽父类同名方法时,子类和父类的这两个方法就各管各的了,好像两个不同名的方法,具体调用那个,由变量的类型决定.
5,类型转换
CType和DirectCast的区别
只要定义了表达式与类型之间的有效转换,CType即可成功,而DirectCast则要求对象变量的运行时类型与指定的类型相同,例如:
dim i as integer=2
dim j as double=directcast(i,double) '不成功,因为2位integer类型,而Ctype可以成功.
6, 装箱--------本人一直不明白的概念
在.NET中,子类对象变量可以直接赋给父类变量,而Object类是所有对象的基类,因此Object可以容纳任何类型的对象变量,代码如下:
1, dim i as integer=100
2, dim obj as object
3, obj=i
4, dim ret as integer
5,ret=obj+1 '装箱
6 ,msgbox(ret)
当把整形变量 i 赋给 object 时,.NET虚拟机会在运行时临时创建一个没有名字的Object对象,然后把 i 值包进去,再赋给一个Object类型的变量Obj,这个过程就叫"装箱"(Box),把 Obj 取出的过程就是拆箱,如第5句.