说到泛型方法,这个是.net 2.0的时候引入的一个重要功能,c#2.0也对此作了非常好的支持,可以不需要显试的声明泛型类型,让编译器自动推断,例如: void F<T>(T value){} //... ; F(i); 此时,编译器可以自动推导出这里的T就是int,这极大的方便了我们写代码的效率. 说到扩展方法,这个是.net 3.5的时候引入的另一个重要功能,c#3.0也在linq中大量的应用这个功能,当扩展方法是扩展一个泛型的类型时,显然也不需要我们指定具体的泛型类型,编译器会为我们自动…
1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢? 首先,假设我们的项目中有一个类,后来过了一段时间,我们明确的知道需要为该类添加一个新功能,考虑这个需求有两个解决办法: (1)直接修改当前类的定义 这样做的缺点是,破坏向后的兼容性,可能以前使用的旧代码无法通过编译.比如说旧代码使用了一个Methed(int,int)的方法,但是为了满足新功能我…
前言 今天在开会时提到的一个概念,入职3个多月多注重在项目中使用C#的编程知识,一直没有很认真地过一遍C#的全部语法,当我们新人被问及是否了解Extension Method时,一时之间竟不能很通俗准确地描述.所以下面做个笔记吧.在空闲的时候还是要多看看MSDN的文档以及C#高级编程,熟悉相关语法知识,做到知其然也知其所以然! 本篇可参考:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-st…
1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢? 首先,假设我们的项目中有一个类,后来过了一段时间,我们明确的知道需要为该类添加一个新功能,考虑这个需求有两个解决办法: (1)直接修改当前类的定义 这样做的缺点是,破坏向后的兼容性,可能以前使用的旧代码无法通过编译.比如说旧代码使用了一个Methed(int,int)的方法,但是为了满足新功能我…
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依赖注入.ORM.对象映射.日志.缓存等等功能,都只定义了一套最基础最通用的抽象封装,提供了一套统一的API.约定与规则,并定义了部分执行流程,主要是让项目在一定的规范下进行开发.所有的功能实现端,都是通过现有的成熟的第三方组件来实现的,除了EntityFramework之外,所有的第三方实现都可以轻…
上一篇随笔 .NET 扩展方法 (一) 已经对 扩展方法有了大致的介绍,这篇算是一个补充,让我们来看一下扩展方法的几个细节: 一.扩展方法具有继承性 当使用扩展方法扩展一个类型的时候,其也扩展了派生类,所以上一篇的遗留问题“如果给object添加一个扩展方法会出现什么效果呢?” 的 答案就是——所有类型都将扩展该方法.object类已经经受住了时间的考验,我们似乎也找不到更合适的理由来扩展object类.从另外的 角度考虑,如果扩展了object类,很有可能会给“智能敏感提示”造成污染,以至于填…
 最近对扩展方法比较感兴趣,就看了看资料,记录一下扩展方法的几种方法. 一. 扩展方法的基本使用: Note: 1. 扩展方法必须在静态类中, 2 扩展方法必须声明静态方法,3 扩展方法里面不能调用其他自定义方法. public static int TryToInt(this string intStr) { ; int.TryParse(intStr, out number); return number; } public static IEnumerable<string> Start…
前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好处, 下一遍会单独介绍Lambda表达式. 这篇主要包括的内容有: 自动属性,隐式类型,对象集合初始化,匿名类型,扩展方法. 下面一起来看下C#3.0 所带来的变化吧. 1,自动实现的属性在C#3.0之前, 定义属性时一般会像下面这样去编写代码: class Person { //定义私有字段 pr…
1.首先我们应该知道什么是扩展方法: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 2.知道了扩展方法怎么创建呢? 定义一个静态类以包含扩展方法.  将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性. 该方法的第一个参数指定方法所操作的类型:该参数必须以 this 修饰符开头. 在调用代码中,添加一条 using 指令以指定包含扩展方法类的 命名空间. 按…
前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好处, 下一遍会单独介绍Lambda表达式. 这篇主要包括的内容有: 自动属性,隐式类型,对象集合初始化,匿名类型,扩展方法. 下面一起来看下C#3.0 所带来的变化吧. 1,自动实现的属性在C#3.0之前, 定义属性时一般会像下面这样去编写代码: class Person { //定义私有字段 pr…