深入C#数据类型

一:值类型与引用类型

值类型源于System.ValueType家族,值类型包括基本数据类型,结构类型和枚举类型。

 值类型:在栈上储存的真实的值

引用类型源于System.Object家族,在C#中引用类型主要包括数组、类、接口、string类型等。

 引用类型:在栈和堆上都要分配空间。

值类型例题:

 1 class Program
 2 {
 3          static void Main(string[]args)
 4          {
 5              int heightZhang=170;
 6              int heightLi=heightZhang;
 7              Console.WriteLine("去年--张浩的身高是:"+heightZhang+“李明的身高是:”+heightLi);
 8              heightLi=180 9              Console.WriteLine("今年--张浩的身高是:"+heightZhang+“李明的身高是:”+heightLi);
10              Console.ReadLine()
11              

图解:

 

引用类型图解:

注意:值传递和引用传递判定依据是有没有ref关键字

结论:

 

01.如果方法的参数类型本身就是引用类型,那么对参数值的修改会永久保存

例如:public void TP(SE se)

{

    se.Count++;//真正的修改se对象的Count值

}

02.如果方法的参数类型本身是值类型,又没有ref修饰,那么对参数值的修改,不会永久保存()

03.如果方法的参数类型本身是值类型,但是有ref修饰,那么对象参数值的修改,也会永久保存。

 

值类型传递 :不带ref的参数传递   SE se

 

引用类型传递:带ref的参数传递 

二:结构

结构体

             /*01.结构体不用new,就可以直接对其属性赋值

             *02.结构体中可以有字段,属性和方法

             *03.结构体是值类型,类是引用类型

             *04.在结构体中不能给字段赋初值,但是类中可以.

             *05.结构体中没有默认构造函数,但类中有默认构造函数

三:构造函数

构造函数

    默认如果定义了一个类,系统会自动的生成一个和该类名称相同,并且没有返回值类型,甚至连Void都没有的方法,该方法就称为构造函数!

Student stu=new Student();

注意问题:值类型的直接父类都是ValueType,而ValueType又继承自Object

特殊的值类型:枚举和结构体

特殊的引用类型:数组和接口

原文地址:https://www.cnblogs.com/chimingyang/p/5333594.html