C#数据类型,值类型,引用类型与转换

1、数据类型分类:值类型与引用类型
值类型:简单类型(int,short,long,float,byte,double,char,decimal(16字节的小数));结构类型,枚举类型;
引用类型:数组类型,类类型,字符串,接口,指针类型
2、值类型:派生自System.ValueType.在存储在栈上;
引用类型:直接从System.Object继承,被分配在堆上,变量保存的是实例数据的内存地址。
区别:1)、值类型在栈上,引用类型存储在堆上(地址存储在栈上)。
 2)、值类型由操作系统管理,引用类型的管理由垃圾回收器管理。
 3)、引用类型可以派生出新的类型,而值类型不能。
 4)、比较两个值类型时,比较的是内容;比较两个引用类型时,进行的是引用比较(也就是是否指向的同一个空间)。
 5)、值类型在内存管理方面具有更好的效率,并且不支持多态,适合用作存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。
 6)、引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
3、装箱与拆箱
public static void Main()
{
int i=9;
object o = i;//装箱:值类型 --> 引用类型
Console.WriteLine (o);
int j = (int)o;//拆箱:引用类型 --> 值类型
Console.WriteLine (j);
}
11、string类型
string为引用类型,但是它比较特殊。具有不变性,一旦被赋值,则不可更改。
更改后是直接重新申请一个空间,改变指向。
public static void Main()
{
string oldStr="old string";
ChangeStr (oldStr);
Console.WriteLine ("调用之后的值为:{0}", oldStr);
}
public static void ChangeStr(string newStr)
{
newStr = "new string";
Console.WriteLine ("方法中的值为:{0}", newStr);
}
输出结果:方法中的值为:new string
调用之后的值为:old string
4、ref与out
ref 把值类型按引用类型传递,形参和实参前都需要加ref关键字。
out 把值类型按引用类型传递,形参和实参前都需要加out关键字。
区别:out:(出)实参可以不初始化,但必须在方法内修改形参的值。
 ref:(引用)实参必须初始化,但形参可以没有值。
5、引用类型按值传递,通过形参可以改变实参的值 void f(Point p);
   引用类型按引用传递,通过形参可以改变实参的值  void f(ref Point p);
   值类型按值传递,通过形参不可以改变实参的值 void f(int i);
   值类型按引用传递,通过形参可以改变实参的值 void f(ref int i);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值