脚踏实地学C#5-扩展方法】的更多相关文章

扩展方法(Extension Method) MSDN定义:能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法须知: 1.扩展方法声明所在的类必须被声明为static 2.扩展方法必须被声明为static 3.扩展方法必须包含this关键字作为它的第一个参数类型,并后跟所扩展的类的名称 创建扩展方法 //通过扩展方法 创建一个类似List FindAll方法 namespace Blog_ExtensonMethod { //静态类 public s…
引用类型和值类型介绍 CLR支持两种类型,引用类型和值类型两种基本的类型: 值类型下有int.double.枚举等类型同时也可以称为结构,如int结构类型.double结构类型,所有的值类型都是隐式密封(sealed)的,防止将一个值类型作其他引用类型或值类型的基类. 任何成为类的都是引用类型.如string.StringBuilder都是引用类型,这两个是引用类型,但不可以被继承,它两也是密封类. 引用类型和值类型的区别是: 值类型是用struct关键字来声明的,引用类型是用class关键字来…
起因 问:静态类可以实现接口及继承? 答:都不可以 思考:为什么不可以呢? 学习 静态类,有时我们又称为工具类(密封抽象类),从MSDN文档没有直接静态类的定义,这里只能说用static(不能用于结构,只能用于类)关键字声明的类,就是静态类. 静态类与非静态类的区别:静态类不能实例化,就是不能通过使用 new 关键字创建静态类类型的变量.通过类名本身访问自身成员: 特性:1.仅包含静态成员(字段.方法.属性.事件) 2.无法实例化 3.是密封的 4.不能包含实例构造函数 定义静态类及其使用 //…
装箱:一种接受值类型的值,根据这个值在堆中创建一个完整的引用类型对象并返回对象的引用(堆地址)的隐式转换 int i_number = 2; //在栈中声明int类型i_Number变量并初始化 object o_number = null; //在栈中声明object类型的o_Number变量并初始化值为null,不在堆中分配内存 o_number = i_number; //装箱过程 如下图所示①→②→③ Console.WriteLine(o_number); 装箱过程:1.在托管堆分配好…
基元类型:编译器直接支持的数据类型 基元类型直接映射到FCL类库上,如int 和Int32是等价的,只不过是int是c#提供的,Int32是FCL类库提供的. int只是Int32的别名 using int=System.Int32; 使用Int32: System.Int32 number = new System.Int32(); number = 2; Console.WriteLine(number); Console.ReadKey(); 生成IL代码为: .method privat…
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到Map.不过当业务逻辑比较复杂的时候,有时候我们可能希望根据情况的不同使用特殊的一组中间件来处理HttpContext.这种情况下如果只用一条管道,处理起来会非常麻烦和混乱.此时就可以使用Map/MapWhen建立一个分支管道,当条件符合我们的设定时,由这个分支管道来处理HttpContext.使用…
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除了直接用ApplicationBuilder的Use()方法注册中间件外,还可以使用ApplicationBuilder的扩展方法UseMiddleware()注册中间件.这种情况下可以注册类型,这个方法会通过反射解析这个类型,并把它包装成Func<ReuqestDelegate,RequestDe…
最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerable<T>>的方法,坦白的说,就是传入的参数是一个IEnumerable<T>,而不是一个T,这种情景是随时可能用到的.当然我们会轻易的发现List<T>里本身就封装了一个方法public int RemoveAll(Predicate<T> match)…
在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继承关系实在编译时就定义好了,所以无法在运行时改变从父类继承的实现.子类的实现与它父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化.当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写它或被其他更适合的类替换,这种依赖关系限制了灵活性并最终限制了复用性.替…
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 下面的示例为String添加判断输入的string是否邮箱格式的功能. using System.Text.RegularExpressions; namespace Extension_Method { //类必须为static的 public static class StringHelper { //扩展方法必须为静态的…