装箱和拆箱及泛型
2009-11-28 19:20
246 查看
术语列表
1:Box 装箱(值类型Value-Type转成引用类型Reference-Type)
2:UnBox拆箱
3: Collections 普通集合
4: Generic 泛型集合
一:vs中打开IL Dasm反编译工具的方法:工具—外部工具-添加
标题:IL Dasm
命令和初始目录填写IL的路径C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ILDASM.EXE
参数填写: $(ProjectDir)bin\Debug\$(TargetName)$(TargetExt)
二: 例子1:装拆箱
int i = 123;
object o = i;//第1次装箱
i = 456;
Console.WriteLine(i +//第2次装箱
"and" +
(int)o//第3次装箱,然后第一次拆箱);
分析:用到字符串连接符”+”,将调用String.Concat
(连接string字符串的多个实例的静态方法)
![](http://images.cnblogs.com/cnblogs_com/freegarden/2009-11-28_161410.gif)
这个例子中将连接2个int和一个string,所以重载列表中最匹配的方法是string.concat(o,o,o).第一个实例i是int类型,转成object类型,进行了一次装箱操作.”and”是string,string本身是引用类型.第3个实例(int)o是值类型,同理进行一次装箱操作.优化方法如下
int i = 123;
object o = i;//只有1次装箱操作
i = 456;
Console.WriteLine(i.tostring() +//无装箱,string类型是一个引用类型
"and" +
o//无装拆箱);
例子2:普通类型和泛型
//结构Person
struct Person
{
private string name;
public Person(string name)
{
this.name = name;
}
public string Name
{
get { return name; }
set { name = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person p = new Person("jason");
//普通集合版本
ArrayList arr = new ArrayList();
arr.Add(p);//加入到集合,装箱操作
Console.WriteLine(((Person)arr[0]).Name);//访问集合元素先拆箱
//泛型集合版本
List<Person> list = new List<Person>();
list.Add(p);
Console.WriteLine(list[0].Name);
}
}
1:Box 装箱(值类型Value-Type转成引用类型Reference-Type)
2:UnBox拆箱
3: Collections 普通集合
4: Generic 泛型集合
一:vs中打开IL Dasm反编译工具的方法:工具—外部工具-添加
标题:IL Dasm
命令和初始目录填写IL的路径C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ILDASM.EXE
参数填写: $(ProjectDir)bin\Debug\$(TargetName)$(TargetExt)
二: 例子1:装拆箱
int i = 123;
object o = i;//第1次装箱
i = 456;
Console.WriteLine(i +//第2次装箱
"and" +
(int)o//第3次装箱,然后第一次拆箱);
分析:用到字符串连接符”+”,将调用String.Concat
(连接string字符串的多个实例的静态方法)
![](http://images.cnblogs.com/cnblogs_com/freegarden/2009-11-28_161410.gif)
这个例子中将连接2个int和一个string,所以重载列表中最匹配的方法是string.concat(o,o,o).第一个实例i是int类型,转成object类型,进行了一次装箱操作.”and”是string,string本身是引用类型.第3个实例(int)o是值类型,同理进行一次装箱操作.优化方法如下
int i = 123;
object o = i;//只有1次装箱操作
i = 456;
Console.WriteLine(i.tostring() +//无装箱,string类型是一个引用类型
"and" +
o//无装拆箱);
例子2:普通类型和泛型
//结构Person
struct Person
{
private string name;
public Person(string name)
{
this.name = name;
}
public string Name
{
get { return name; }
set { name = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person p = new Person("jason");
//普通集合版本
ArrayList arr = new ArrayList();
arr.Add(p);//加入到集合,装箱操作
Console.WriteLine(((Person)arr[0]).Name);//访问集合元素先拆箱
//泛型集合版本
List<Person> list = new List<Person>();
list.Add(p);
Console.WriteLine(list[0].Name);
}
}
相关文章推荐
- 您希望通过将所有ArrayList对象替换为相应的泛型版本以提高应用程序的效率,并使得代码更易于使用。当结构体或其他值类型存储在这些数据结构中时,会导致装箱/拆箱操作,这时就需要这么做。
- C# 装箱 拆箱 泛型
- 黑马程序员Java基础之泛型(Genric)、拆箱与装箱、享元模式
- C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)
- Java之集合初探(二)Iterator(迭代器),collections,打包/解包(装箱拆箱),泛型(Generic),comparable接口
- 从装箱拆箱看泛型
- Java笔记(8)-泛型、链表、LinkedList<E>、Iterator迭代器、Collections类方法、堆栈、HashMap<K,V>、TreeSet<E>、自动装箱和拆箱
- 【java学习】装箱与拆箱、泛型
- day9 JDK 新特性--注解、新 for 循环、静态导入、自动装箱拆箱、泛型、可变长参数
- WPF中多线程统计拆箱装箱和泛型的执行效率
- C# 装箱、拆箱、泛型
- 集合和泛型8-----装箱、拆箱与类型安全
- 跟王老师学泛型(二):Java自动装箱与拆箱
- .Net学习笔记----2015-06-25(File类的读写文件、List泛型集合、装箱和拆箱、Dictionary字典集合)
- 装箱、拆箱、泛型
- C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)
- JDK1.5新特性:静态导入、可变参数、增强for循环、自动装箱拆箱(享元设计模式)、枚举、注解、泛型、
- C#基础(18)——List泛型集合、装箱、拆箱、字典集合与Hashtable区别
- 集合框架-泛型、装箱拆箱
- WPF中多线程统计拆箱装箱和泛型的运行效率