阶段总结:
第一阶段的学习已经完成,主要的内容再做个小的总结
第一天:
1、主要是从类型上来概述装箱和拆箱的概念(值类型到引用类型是装箱,反正拆箱(我要再记一遍))。
2、隐式类型转换和显示类型转换,对于有继承关系的,子类到基类的转换是隐式类型转换,反之是显示类型转换,建议使用As
3、如果不存在继承关系的也可以通过重载类型operator的方式(explicit显示转换,implicit隐式转换)
第二天:
1、使用TryDo模式,成功则返回True,执行失败返回False,如果要返回实际参数,应该为该方法提供Out参数
2、可空类型int ?
3、??判断左侧是不是为null,不为null则把左侧返回,否则返回右侧
第三天:
1、readonly和const的用法
第四天:
为Sort方法提供比较器,Sort方法需要提供比较器,如果不提供比较器则会报错排序会报错,有三个重载
1)第一个是arraylist里装的实例已经实现了比较器Icomparable则可以
2)对于非默认比较器则需要在方法参数里放置实现Icompare接口比较器的方法。
//:
总结:
1、这个建议似乎有些多余,不过还是有收获的
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PromoteDay07
{
class Program
{
static void Main(string[] args)
{
/*
* 建议15:使用Dynamic来简化反射实现(就是用实例调动方法的方式(我原来就是这么做的呀,为什么要还要告诉我别的方法呢!!不过掌握了代码时间运算的方式还是值得的!!))
* 1、值类型到引用类型是装箱,引用类型到值类型是拆箱
*/
//DynamicSample dynamicSample = new DynamicSample();
//var addMethod = typeof(DynamicSample).GetMethod("Add");
//int re = (int)addMethod.Invoke(dynamicSample, new object[] { 1, 2 });
int times = 100000000;
DynamicSample reflectSample = new DynamicSample();
var addMethod = typeof(DynamicSample).GetMethod("Add");
Stopwatch wathc1 = Stopwatch.StartNew();
for (int i = 0; i < times; i++)
{
addMethod.Invoke(reflectSample, new object[] { 1, 2 });
}
Console.WriteLine("反射时间:{0}毫秒", wathc1.ElapsedMilliseconds);
DynamicSample dynamicSample = new DynamicSample();
Stopwatch watch2 = Stopwatch.StartNew();
for (int i = 0; i < times; i++)
{
dynamicSample.Add(1, 2);
}
Console.WriteLine("dynamic 耗时:{0}毫秒", watch2.ElapsedMilliseconds );
Console.ReadKey();
DynamicSample reflectSapleBetter = new DynamicSample();
var addMethod2 = typeof(DynamicSample).GetMethod("Add");
var delg = (Func<DynamicSample, int, int, int>)Delegate.CreateDelegate(typeof(Func<DynamicSample, int, int, int>), addMethod2);
Stopwatch swatch2 = Stopwatch.StartNew();
for (int i = 0; i < times; i++)
{
delg(reflectSapleBetter, 1, 2);
}
Console.WriteLine("优化后的反射时间:{0}毫秒", swatch2.ElapsedMilliseconds);
Console.ReadKey();
}
}
public class DynamicSample
{
public string Name { get; set; }
public int Add(int a, int b)
{
return a + b;
}
}
}