[学习笔记]Asp.net(C#)菜鸟进级系列之引用类型
2006-04-25 23:03
585 查看
引用类型包括:
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 倍。取消装箱时,强制转换过程所需时间可达赋值操作的四倍。
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 倍。取消装箱时,强制转换过程所需时间可达赋值操作的四倍。
相关文章推荐
- [学习笔记]Asp.net(C#)菜鸟进级系列之值类型
- [学习笔记]Asp.net(C#)菜鸟进级系列之流程控制
- C#学习笔记--引用类型分类,对象类型、字符串类型、数字类型,类型转换
- C#学习笔记—值类型与引用类型
- ASP.NET Core 2.0系列学习笔记-DI依赖注入
- C# .net asp学习笔记
- C#学习笔记10:Try-catch的用法和引用类型、值类型整理
- C#.NET学习笔记---C#中方法参数的传递方式: 值类型(默认),ref类型,out类型和params类型
- C#学习笔记 2 初识引用类型
- Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中]
- CLR Via C# 学习笔记(1) 基元类型 值类型 引用类型
- Asp.Net Ajax 学习笔记10 JavaScript的原生类型以及Microsoft AJAX Library的相关扩展(下)
- ASP.NET MVC 3 学习笔记系列之Music Store(4)
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
- 我的C# asp.net 学习笔记
- ASP.NET Core 2.0系列学习笔记-启动类Startup
- CLR Via C# 学习笔记(1) 基元类型 值类型 引用类型
- <NET CLR via c# 第4版>笔记 第5章 基元类型、引用类型和值类型
- Asp.Net自学笔记...(数据类型和数据转换)---学习的开始
- ASP.NET MVC 3 学习笔记系列之Music Store(2)