C#编写高质量代码第七天

阶段总结:

第一阶段的学习已经完成,主要的内容再做个小的总结

第一天:

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;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值