q1:值类型和引用类型的差别
q2:值类型的装箱和拆箱
answer:
装箱是将一个值类型转换为一个引用类型。例如:在arraylist中add一个结构体的实例。
步骤:
1 从托管堆上为引用类型分配内存。内存的大小为值类型本身的大小加上其他的空间包括一个方法表和一个syncblockindex
2 值类型的字段被复制到托管堆上新分配的对象的内存中
3 返回托管堆中新分配对象的地址作为该对象的引用。
拆箱是为了获得托管堆上对象的元素到栈空间的值类型中。
1获取在托管堆上的被装相的值类型的地址
2从托管堆上复制到栈上的值类型中
用到directcast和ctype静态方法
q3:directcast和ctype的区别
ctype在转型比directcast强。比如:一个int32的值类型装箱为object,拆箱的时候directcast只能从object转型为int32(作为拆箱的步骤可能更加安全–没有多的转型),而ctype则可以从object转型为int16(包括了拆箱和转型2个动作)
q4:类型构造器和实例构造器的区别
q5:memberwiseclone浅拷贝过程
umemberwiseclone创建与当前实例相同类型的新实例,然后复制原始对象的非静态字段。如果字段为值类型的则为则对该字段执行逐位复制。如果字段是引用类型,则复制该引用但不复制被引用的对象;这样,原始对象中的引用和复本中的引用指向同一个对象。
如何实现深拷贝?
实现iclonable接口,override父类的clone()函数
public function clone() as object implements iclonable
一般的方法:new一个要clone的新对象,将原对象中成员的值赋给新对象的成员,返回该新对象的引用。
较好的办法:将对象序列化到一个system.io.memorystream中,然后立即对该内存流执行反序列化,从而得到一个新的对象。
q6:module与class的区别
module实际上也是一种特殊的class。该类的保护级是friend,该类不包含任何实例构造器,可以防止创建它的实例,方法和变量都声明为shared。
使用module是为了实现模块外部代码对模块中的成员的访问。2来是为了早期vb代码移植的方便。
q7:vb.net中的参数传递
有两种一种是按值传递byval,一种是按引用传递byref。按值传递时候会拷贝一份原参数,引用则相当于别名。
q8:structure和class的区别
1 结构是值类型,其实例是在栈上面分配的;而类的实例是在堆上分配的,其引用是在栈空间上。
2 结构不能被继承,类可以被继承。
3 结构的默认成员都为public,并且其成员没有protected,不能给变量声明指定初始值,不能定义默认拷贝构造函数和数组初始大小 ;类的变量和常量是private,其他成员是public
4 结构从不终止,不会调用finalize方法;
创建一个class的实例和创建一个structure实例的区别
结构是值类型,其实例是在栈上面分配的;而类的实例是在堆上分配的,其引用是在栈空间上。
q9:如何保证系统中只有一个程序的实例在运行
1 首先获得当前程序在系统中的进程
2 用该进程的名称为参数,从系统中取得与该进程名称相等的所有存在的进程放在process数组里面。
3 循环该process数组,如果有process的执行文件名和当前产生process的文件名。如果有,则表明工程已经运行,退出即可,没有的话则继续执行。
q:重写overrides与重载overload的区别
overloads是同一个类中对同名函数不同参数的重载
overrides是继承类中对父类中标示为overridable的函数的重写,实现该函数在继承类中特有的功能
q:shadows的作用?
当继承类中的方法被声明为shadows的时候,会使父类中所有与该方法同名的函数被屏蔽掉,不继承在子类中
q:抽象类(mustinherit-mustoverride)与接口(的区别
抽象类不能被实例化只能被他的继承类实现,接口也不能被实例化,只能被implements。
抽象类除了方法会mustoverride修饰外,其他和一般的类没有区别;接口的成员只能有嵌套类型、方法、属性和事件。
q:equals
q:string和stringbuilder区别
这个区别有点类氏于java中的string和stringbuffer的区别。
q:模拟一个combobox接口?
q:标准事件处理程序
系统实例化一个有反映能力的学生,让他去逛商场,这个时候他有可能碰到很多人,当他看到mm的时候,他会流鼻血。
module module1
class cstudent
public event seeingmm
sub shopping
raiseevent seeingmm()
end sub
end class
sub stu_seeingmm() handles stu.seeingmm ‘我们定义这个学生看到mm这个事件发生的
‘时候他就流鼻血
console.writeline(“流碧血”)
end sub
withevents stu as new cstudent ‘1 系统实例化一个有反映能力的学生
sub main()
stu.shopping() ‘2 让他去逛商场,
end sub
end module
q:抽象类(mustinherit-mustoverride)与接口(的区别
q:抽象类(mustinherit-mustoverride)与接口(的区别