一.
using System;
//001.C#支持哪几个预定义的值类型
//002.C#支持哪几种预定义的引用类型
namespace _001_homework
{
class Program
{
static void Main(string[] args)
{
//1.valueType(值类型):int,float,double,bool,char,decimal,struct,enum
//2.referenceType(引用类型):string,object,数组,class,接口(interface),委托
//引用类型指的是实际值引用(指针)表示的数据类型,如果分配给某个变量一个引用类型,那这个变量将引用(指向)原始值
}
}
}
二.
using System;
using System.Collections;
using System.Collections.Generic;
//003_如何解决装箱和拆箱引发的性能问题
namespace _002_如何解决装箱和拆箱引发的性能问题
{
class unboxPerformance
{
//驼峰命名法
///<summary>
///将5百万条的记录写入链表并读出,的操作做5遍
///其中,写入和读取的操作就是装箱和拆箱的操作,最后计算出执行完这个的时间
///</summary>
private static void RunUnbox()
{
int count;
//语法糖,对语法简化(这里的now,其实也是一个(索引:将类对象像数组的形式操作)函数,只是因为经常用,所以简化了)
DateTime startTime = DateTime.Now;///方法函数返回值是什么类型,接受量就是什么类型,返回值一致
//int startTime=(int)DateTime.Now//X错误
ArrayList myArray = new ArrayList();//构造函数。函数名和类名一样。实例化
//泛型,广泛的类型
List<int> mylist = new List<int>();//list<int>也是一个类型
for (int i = 5; i > 0; i--)//按tab键自动补全
{
myArray.Clear();
for (count = 0; count < 5000000; count++)
{
myArray.Add(count);//把count值类型通过add装到myArray链表(装箱)
}
int j;
for (count = 0; count < 5000000; count++)
{
j = (int)myArray[count];//拆箱
}
}
DateTime endtime = DateTime.Now;
Console.WriteLine("使用装箱的数组--\n开始的时间{0}\n结束时间{1}\n花费时间{2}", startTime, endtime, endtime - startTime);
}
/// <summary>
/// 将5百万条记录写入到泛型List集合并将数据读取出来的工作做5遍
/// 其中写入和读取List集合不需要装箱和拆箱
/// 最后计算执行方法的时间
/// </summary>
private static void NoRunbox()
{
int count;
DateTime starttime = DateTime.Now;
List<int> myList = new List<int>();
for (int i = 5; i > 0; i--)
{
myList.Clear();//不管有没有建议先清空
for (count = 0; count < 5000000; count++)
{
myList.Add(count);
}
int j;
for (count = 0; count < 5000000; count++)
{
j = myList[count];//这里不需要强转,返回就是int
}
}
DateTime endtime = DateTime.Now;
Console.WriteLine("使用泛型--\n开始时间{0}\n结束时间{1}\n花费时间{2}", starttime, endtime, endtime - starttime);
}
/// <summary>
///运行结果如下:
/// 使用装箱的数组--
///开始的时间2020/6/7 13:47:02
///花费时间00:00:03.4034001
///使用泛型--
///开始时间2020/6/7 13:47:05
///结束时间2020/6/7 13:47:06
///花费时间00:00:00.3037917
///请按任意键继续. . .
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
//任何值类型,引用类型都可以和object对象相互转换
//装箱(box):将一个值类型显性或隐形转化为一个object类型。值类型转化为引用类型
//拆箱(unbox):指引用类型转换为值类型
//Console.WriteLine("Hello World!");
RunUnbox();
NoRunbox();
Console.WriteLine(3.4 / 0.3);//效率相差11倍,可见装箱,拆箱很消耗时间
}
};
}
浙公网安备 33010602011771号