引用类型的变量又称为对象,可以储存对实际数据的引用。
C#有两个内置的引用类型,分别为Object和String类型。
Object类型:
在C#的统一类型系统中,所有类型(预定义类型,用户定义类型,引用类型和值类型)都是直接或间接从Object继承的。
可以将任何类型的值赋值给Object类型的变量。将值类型的变量转换为对象的过程称为“装箱”。
将对象类型的变量转换为值类型的过程称为“取消装箱”。
示例:Object类型的引用调用
using System;
namespace wm16
{
class Program
{
class ObjectClass //定义一个类
{
public int i = 60; //定义一个整形变量
}
static void Main(string[] args)
{
object a; //定义Object类型
a = 1; //装箱
Console.WriteLine(a); //输出装箱后的值
Console.WriteLine(a.GetType()); //输出类型
Console.WriteLine(a.ToString()); //以字符串输出
Console.WriteLine(); //换行
a = new ObjectClass(); //用ObjectClass类进行初始化
ObjectClass classRef; //定义ObjectClass
classRef = (ObjectClass)a; //拆箱
Console.WriteLine(classRef.i); //输出i值
}
}
}
运行结果:
1
System.Int32
1
60
请按任意键继续. . .
说明:可以看到classRef只是指向了a因为classRef并没有实例化,所以它的classRef.i等于60.
string类型:
string类型便是unicode字符的字符串。字符串是不可变的。字符串一旦被创建,其内容就不能更改。
尽管string是引用类型,但定义相等运算符(==和!=)是为了比较string对象(而不是引用)的是。
这使得对字符串相等性的测试更为直观。
示例:string类型的比较
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace wm16_2
{
class Program
{
static void Main(string[] args)
{
string a = "hello"; //丁定义字符串
string c = "h"; //定义字符串
c = c + "ello"; //字符串相连
Console.WriteLine(a == c); //判断字符串的内容是否相等
Console.WriteLine((object)a == (object)c); //判断字符串的实例是否相等
}
}
}
运行结果:
True
False
请按任意键继续. . .
说明:这是显示“True”,然后显示“False”,因为字符串的内容是相同的,但是a和c引用的不是同一字符串实例。
string转义序列:
string可以包含转义序列,两种表示法:
示例:
string filename = "C\\load\\file\\wm.txt";
string filename = @"C\load\file\wm.txt";
拆箱和装箱:
装箱就是将值类型转换为引用类型Object,这使得值类型可以存储在垃圾回收堆里。
拆箱将从对象中提取值类型。拆箱就是将引用类型转换为值类型。
示例:拆箱与装箱
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace wm16_3
{
class Program
{
static void Main(string[] args)
{
int i = 16;
object a = (object)i; //装箱
a = 123;
i = (int)a; //拆箱
Console.WriteLine(a);
Console.WriteLine(i);
}
}
}
运行结果:
123
123
请按任意键继续. . .
说明:拆箱、装箱可能对程序性能产生影响。
转载请保留原文链接:http://blog.csdn.net/nonknown/article/details/17928017