数据类型
C#中有二种类型:引用类型和值类型;
值类型:在栈中分配空间,由系统自动分配;
引用类型:在堆中分配空间,由"new"(也就是程序员自身)来分配空间,指向同一内存空间;
引用类型赋值以后,他们共用同一内存空间,互相影响,一个值改变,另外一个的值也会改变;
1.1 值类型: 主要有数据类型,结构体,枚举;(string类型为特殊的引用类型)
// 值类型
int a1=1,b1=2;
int c1=a1,d1=b1;
int temp=c1;
c1=d1;
d1=temp;
Console.WriteLine("c1的值为{0},d1的值为{1}",c1,d1);
得到c1=2,d1=1;
1.2值类型是密封的(默认sealed),所以无法继承;
public static void Main(string[] args){
// 值类型,由系统在栈中自动分配空间
int a;
intb=1;
// 引用类型,需要使用new关键字去堆中分配空间;
int[] myArray=new int[10];
Hero hero=new Hero(); // 引用类
}
1.3 值类型变量赋值又称为拷贝赋值
二 引用类型
引用类型: 包含Object, 数组, 类, 接口,委托,string(特殊的);
可以派生出新的类型;
引用类型变量的赋值只赋值对对象的引用,而不复制对象本身;
// 引用类型
例如: int[] a=new int[1]
int[] b=new int[1];
a[0]=3;
a=b;
b[0]=33;
Console.WriteLine("a的值为{0},b的值为{1}",a[0],b[0]);
运行得到 a[0]=33, b[0]=33;
例如: int a=new int();
恒等于: int a=0; // 默认构造函数将0赋值给了a;
使用new运算符的时候,将调用特定类型的默认构造函数并对变量赋默认值;
三 值类型和引用类型的区别
1.在C#中,值类型的变量直接存储数组,而引用类型的变量是对数据的引用
2.引用类型和值类型相同的是,结构体可以实现接口;
3.引用类型能派生出新的类型,而值类型不能;
4.引用类型可以包含null值,值类型不能(可以将null赋值给值类型,如 int? a =null;)(因为值类型都是密封的 sealed);
5.值类型的变量赋值是直接copy, 而引用类型是只复制对对象的引用;
6.值类型不支持多态,引用类型支持多态