值类型引用类型

1、值类型:结构和枚举、简单类
//定义一个值类型
public struct ValPoint{
public int x;
public ValPoint(int x){
this.x=x;
}
}
ValPoint vPoint1;//变量vPoint1包含了值类型的所有字段
vPoint1.x=10;
Console.WriteLine(vPoint1.x);//输出10
public static bool ReferenceEquals(Object objA,Object objB)//Object类型 引用类型
{
return objA==objB;
}
1.1.1、ValPoint vPoint1=new ValPoint(1);
ValPoint vPoint2=vPoint1;
1.1.1-1、result=(vPoint1==vPoint2);//编译错误:不能再VaPoint上应用"=="操作符
1.1.1-2、result=Object.ReferenceEquals(vPoint1,vPoint2);//false
相当于 Object boxPoint1=vPoint1;
Object boxPoint2=vPoint2;
result=(boxPoint1==boxPoint2);//false 引用类型 比较是否指向同一个对象
1.1.1-3、result = vPoint1.Equals(vPoint2);//true
1.1.1-4、vPoint2.x=2;
result=vPoint1.Equals(vPoint2);//true
注意:所有的元素使用前都必须初始化;
调用结构上的方法前,需要对其所有的字段进行赋值
说明:隐式声明的构造函数,可对结构中所有的值类型成员赋值0,所有引用类型赋予null
ValPoint vPoint1 = new ValPoint();
Console.WriteLine(vPoint1.x);//输出0

2、引用类型:类、接口、委托
//定义一个引用类型
public class RefPoint{
public int x;
public RefPoint(int x){
this.x=x;
}
}
2.1.1、bool result;
RefPoint rPoint1=new RefPoint(1);
RefPoint rPoint2=rPoint1;
result=(rPoint1==rPoint2);//true
result=rPoint1.Equals(rPoint2);//true
2.1.2、bool result;
RefPoint rPoint1=new RefPoint(1);
RefPoint rPoint2=new RefPoint(1);
result=(rPoint1==rPoint2)//false
result=rPoint1.Equals(rPoint2);//false
注意:对于引用类型,即使类型的实例(对象)包含的值相等,如果变量指向的是不同的对象,那么也不相等
2.1、变量:可以是值类型,也可以是引用类型;
2.2、对象引用:变量是引用类型时,由于本身只包含实际对象的引用(内存地址)
Object a=null;
Console.WriteLint(a.ToString());//未将对象引用设置到对象的实例
2.3、对象实例:在堆上创建的对象,根据类的定义分配了内存
public class RefPoint{
public int x;
public RefPoint(int x){
this.x=x;
}
public RefPoint(){}
}
RefPoint rPoint1;//对象引用
rPoint1 = new RefPoint(1);//对象实例

3、装箱:将一个值类型转换成等价的引用类型;
3.1、int i=1;
object boxed = i;
Console.WriteLine("Boxed Point:"+boxed);

4、拆箱:将一个已装箱的引用类型转换成值类型
4.1、int i=1;
Object boxed = i;
int j;
j=(int)boxed;
Console.WriteLine("UnBoxed Point:"+j);
说明:装箱和拆箱需要反复在堆上进行操作,因此,在程序中应该尽量避免无意义的装箱和拆箱
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值