c# 高级特性


  • 调用匿名方法

方法,也就是一小段可以重用的处理过程,一般我们都会把它独立编写出来,但如果这个逻辑本身非常简单,而且其变化范围仅仅是一个非常小的局部,或者需要使用闭包(需要把抽象的处理作为一个参数传递给其他逻辑调用),那么使用匿名方法是个不错的选择。此外,匿名方法结合反射会大大提升公共库的灵活性。

  • C#用委托比用接口好,用委托比用线程池好
  • 如果将异步调用任务交给统一的线程池机制来维护,则需要增加额外开发量,不如直接使用.net framework包装好的如TimerCallback之类的Delegate。 Interface可以使用的抽象方法描述是固定的,而使用Delegate,在运行过程中,可以根据动态要求自动适配目标方法。

  • C#提供的抽象能力
    1. Class:提供了对现实世界的抽象
    2. Interface:提供了对Class行为的抽象
    3. Delegate:对方法的抽象
    4. Attribute:对类型元数据的抽象
  • 泛型工厂方法
  • public static class RawGenericFactory{
        public static T Create<T>(string typeName)
        {
            return (T)Activator.CreateInstance(Type.GetType(typeName));
        }
    }
    public class RawGenericFactory<T>
    {
        public T Create(string typeName)
        {
            return (T)Activator.CreateInstance(Type.GetType(typeName));
        }
    }
  • 泛型的作用
    1. 使用强类型避免装箱,提升性能
    2. 泛型约束,使接口和参数更明确
    3. 当类成员使用相同类型参数的同时,该类型参数的约束也同样适用于相关成员。
    4. 参数约束不适用于Attribute
  • 使用泛型的建议
    1. 设计每一个模式角色类的时候,要根据客户程序的需要,反复斟酌类型参数约束
    2. 除了容器类以外,尽可能不要在生产代码里出现无约束的类型参数(”裸约束类型”)
  • 索引器使用指导

      LINQ时代的索引器:乍一看,索引器似乎已经越来越接近于LINQ通过Lamada表达式完成的功能,不过有一些区别。
    • 定位上索引器一般面向单条索引结果,而不是批量结果(尽管我们可以让索引器返回一个IEnumerable)。
    • 从封装和客户程序使用的角度看,LINQ有各种内置并被优化的LINQto系列,而所引起给客户程序的是一种更贴近业务语义、更加直观的形式,因为客户程序无须编写LINQ查询,按照键值索引即可。
    • 不过,把两者结合使用倒是一个非常不错的组合,索引器做接口,LINQ完成内部检索逻辑,客户程序在无须记住具体方法名称的前提下,按照键值检索即可,索引器内部则依托LINQto系列的基础,提供对各种异构数据源的访问

  • 猜你喜欢

    转载自blog.csdn.net/u010178308/article/details/81485457