天性懒惰

Give me a try, believe that I can fly!--集歧步以千里,聚沙以成塔。偷懒的最高境界就是更加努力的工作!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

引用类型包括:
         object Type、class Type、interface Type、delegate Type、string Type、Array Type
其中属于系统内建类型的只有string和object类型。
1、object Type(System.Object)
        它是所有数据类型(包括预定义的和自定义的数据类型)的基类型。可以把任何类型的数值赋给object类型的变量。
2、string Type(System.String)
        用来表示unicode字符的字符串
        注:string类型虽然是引用类型,但是在对string类型的变量进行比较(==或!=)时,参与比较的是string的值,而不是引用。
 如 :string myString="how are you!";
       string mySecString="how are you!";
       Console.WriteLine(myString==mySecString);//输出true
       Console.WriteLine((object)myString==mySecString);//输出false;
        使用"[]“操作符可以操作string中的单个字符(此时string可以看成是一个字符数组)。
        字符字面值由两种使用方法:1、直接家引号用(这时需要处理转义字符)2、由@+""使用(这时内部不处理转义字符)。
3、class Type
         只能单继承。类成员默认的修饰府是private。
4、delegate Type
         使用代表允许外部用一个代表对象封装一个方法的引用,再通过使用这个代表对象来调用被封装的方法。
         声明一个代表就相当于定义一个类,改类型封装了个方法以及它的参数和返回类型,对于静态方法,它直接封装了要调用的方法,对于实例方法,它封装了实例以及其方法。如果有了代表以及其方法和返回类型,就可以用它们来调用代表。
        它和c/c++中的指针相似,只不过它是面向对象的、类型保护并且安全性也比指针搞一些。
        说明:代表不知道也不关心其引用对象的的类,任何对象都可以,只要方法的返回类型和参数和代表的一致就可以。
        对于类型相同并且返回值为void的代表类型,可以对其复合(用+复合代表,用-从复合代表中删除一个代表)。(由于都是void对象,复合相当于把两个方法绑到一块儿了……)
5、interface Type
        当一个类要实现两个接口,而这两个接口以相同名称的成员(如:相同的方法名…)时,必须要显式实现接口。
        对于显式实现大方法,不能够通过类的实例来访问方法,必须通过接口的实例来访问。
小结:
        整个c#的数据类型基本上也温习了一遍,深入了解了它的基本结构,算是对c#的经络认识的清楚一点了吧(汗……)!这些类型在系统使用往内存加载时,值类型是直接将变量放入堆栈中,占用的内存空间相对较小,存取速度也快一点。而引用类型则是把对数据的引用放在栈里,实例的对象放到堆里,栈里只用来存放要指向堆中实例的首地址(所以两个引用类型变量指向同一个堆的地址时,操作一个另一个也要受到影响)。
        值类型和引用类型之间可以相互转换(也就是c#中的boxing和unboxing机制)。从值类型到引用类型转换时(boxing)是把值类型复制到堆空间中,然后再在栈里添加一个对这个堆首地址的引用。从引用类型向值类型转换时(unboxing)则相反。换句话来说:boxing是把一个值类型隐式转换成一个object对象,unboxing则是将一个object类型显式转换成一个值类型。它们是互逆过程。
 补充:
        (引用自msdn)装箱和取消装箱都是需要大量运算的过程。对值类型进行装.箱时,必须创建一个全新的对象。此操作所需时间可比赋值操作长 20 倍。取消装箱时,强制转换过程所需时间可达赋值操作的四倍。

posted on 2006-04-25 23:03  Wigruky  阅读(1104)  评论(2编辑  收藏  举报