如鹏网.Net高级技术3.值类型和引用类型

.Net高级技术3.值类型和引用类型

 

C#中哪些类型属于值类型,哪些类型属于引用类型,

什么是装箱,什么是拆箱?

了解结构体,ref和out使用。

以上都是该段课程中需要掌握的内容。

 

 

 

什么是值类型:值类型均隐式派生自System.ValueType   :类型 变量名=初始化值;

 int num=90; num.GetType().Basetype()

值类型有哪些:数值类型、bool、结构、枚举查看IL,隐式继承自ValueType

什么是引用类型:引用类型派生自System.Object

引用类型有哪些:字符串、数组、类、接口等查看IL隐式继承自Object ;

 引用类型变量的赋值只复制对对象的引用。

值类型变量赋值会拷贝一个副本。

值类型只在栈中存储,引用类型的变量名是存储在栈内存中,new 对象存储在堆内存中。

栈内存:值类型,变量名

堆内存:new 类

 

装箱和拆箱是怎么回事?前后类型必须一样

IL 中 有box 就发生了装箱,有unbox就发生了拆箱

有没有发生装箱,首先看有没有继承关系,int 和string之间没有继承类型

装箱在值类型向引用类型转换时发生(两者有明确的继承关系)

拆箱在引用类型向值类型转换时发生(两者有明确的继承关系)

-------------------------------------------------

结构体 :省空间可以使用。

在没有面向对象、在没有类的情况下如何组织一些相关的数据?

结构体: 一种值类型,拷贝副本。

注意: 对于结构,不像类那样存在继承。一个结构不能从另一个结构或类继承。但是,结构从基类 Object 继承。

结构只能实现接口,其方式同类完全一样;不能继承。

结构体是值类型,传值的时候拷贝的是副本

对于结构,不像类那样存在继承。

 

一个结构不能从另一个结构或类继承。但是,结构从基类 Object 继承(有object类的方法)。

结构可实现接口,其方式同类完全一样。

结构体大家了解即可。

-------------------------------------------------

 ref 和out使用:

1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和执行方法时,都要加ref或out关键字。以满足匹配。 3、out适合用在需要retrun多个返回值的地方, 而ref则用在需要被调用的方法修改调用者的引用的时候。

 ref :

  可以把值传到方法中,也可以把方法中的值返回来---〉可进可出的

  传入的参数必须先初始化。

当参数个数 和类型一样时,只是ref 和 out 是不能构成重载的 。

 

使用ref传参数的时候,传入的参数必须先被初始化。

out:

  把方法中的值传出去,外面调用变量可以没有初始值。

 

使用out传参数的时候,必须在方法中对其完成初始化。 

使用ref和out时,在方法的参数和执行方法时,都要加ref或out关键字。以满足匹配。 

out适合用在需要retrun多个返回值的地方,

而ref则用在需要被调用的方法修改调用者的引用的时候。

  案例:

    int n;

    int.TryParse("sf",out n);

    Console.WriteLine(n); //0默认值

 

 

如鹏网:http://www.rupeng.com

posted @ 2016-03-04 17:26  小居工作室  阅读(190)  评论(0编辑  收藏  举报