随笔分类 - C#高级语法和底层原理
记录C#中的高级语法和一些原理
摘要:线程安全 本地状态(Local)和共享状态(Shared) Local本地独立: CLR为每个线程分配自己的内存栈,以便使本地变量保持独立。 static void Main(string[] args) { new Thread(Go).Start();//在分线程上 调用Go() Go();//
阅读全文
摘要:1.Thread 什么是线程Thread 线程是一个可执行路径,它可以独立于其它线程执行。 每个线程都在操作系统的进程(Process) 内执行,而操作系统的进程提供了程序运行的独立环境。 单线程应用,在进程的独立环境里只跑一个线程,所以该线程拥有独占权。 多线程应用,单个进程中会跑多个线程,它们会
阅读全文
摘要:多线程 多个线程之间不会等待,就像ajax那样,代码从上往下执行,不会等待线程执行完了才执行下一行。 Thread基本使用 使用1、 button按钮单击事件里面写代码 Thread thread = new Thread(ThreadInvork); thread.Start(); ThreadI
阅读全文
摘要:自己写一个往Cookie里读写对象的扩展方法 创建一个静态类CookieExtands,用来存扩展方法 该类要用到序列化,要引用命名空间:using System.Web.Script.Serialization; public static class CookieExtands { //publ
阅读全文
摘要:自定义List 1在visual studio中创建一个类:MyList 代码如下: public class MyList<T> : IEnumerable<T>//IEnumerable<T>这个接口用于实现延迟调用 { 类名后面跟<T>,表示可以传任意类型(泛型) //集合内部的数组 priv
阅读全文
摘要:概念 协变:以out修饰的泛型类型叫做协变类型,协变只能返回(当返回值),用于返回参数,协变T只能用来当返回值使用 逆变:以in修饰的泛型类型叫做逆变类型,逆变只能当参数传进来,用于接收参数,逆变T只能用来当参数传递 协变和逆变都是单向的。in可读不可写,out可写不可读 创建两个类,基类:Pers
阅读全文
摘要:一、反射实例化与多态结合 反射获取类型的成员 首先加载程序集 Assembly assembly = Assembly.LoadFile(@"C:\Users\Admin\source\repos\Test\ReflectDemo\Fhzm\bin\Debug\Fhzm.dll"); 通过程序集获取
阅读全文
摘要:using使用场景 在我们ado.net中,使用SqlConnection连接对象连接数据库是会占用资源的,因此在操作完数据库后要及时关闭,如: 但是,使用using就可以自动释放所占用的资源,这样就不用手动关闭Connection的连接了,而且防止忘记手动关闭的情况出现 原理: 我们可以在SqlC
阅读全文
摘要:如何调用 静态构造方法调用只需要你在外面用这个类的其它静态方法时候才会调用,类似于静态类里调用静态方法的时候执行。 原理 静态类里的静态构造方法在执行的时候只会执行一次就不会执行了,哪怕再次执行这个静态类里的方法,即使是非静态类里的静态构造方法也是如此 但是,如果是泛型类则不一样,即使每次调用同一个
阅读全文
摘要:使用场景 框架中:类上面、方法上面、属性上面、字段上面、参数里面..... 特性本质 就是一个类,继承自Attribute类 自定义特性 直接继承Attribute类即可 public class TableAttribute:Attribute 配置特性的使用范围 通过AttriibuteUsag
阅读全文
摘要:EF框架类似功能:SQL语句解析(条件) 表达式与EF框架 在我们使用EF框架进行筛选等等条件操作或者访问数据库的时候,EF都会将我们传的lambda表达式拼接为相应的表达式树,然后转为数据库认识的SQL语句格式的表达式如: //EF上下文对象 StudentDBEntities studentDB
阅读全文
摘要:1、AutoMapper自动映射框架:用于不同类之间的相互转换,原理就是通过表达式树来实现的。 不同类相互转换有多种方式,比如反射,拿到一个类里的所有属性再循环复制给另一个类。或者是通过序列化和反序列化将连个 类互相转换,不过效率都没有通过表达式树效率高。 我们有时候需要进行对象转换: 我们定义如下
阅读全文
摘要:什么是表达式树 表达式树以树形数据结构表示代码,其中每一个节点都是一种表达式,它将我们原来可以直接由代码编写的逻辑以表达式的方式存储在树状的结构里,从而可以在运行时去解析这个树,然后执行,实现动态的编辑和执行代码。在.Net 里面的Linq to SQL就是对表达式树的解析。 表达式和表达式树,表达
阅读全文
摘要:IQueryable接口:也实现了IEnumerable接口,所以它也是可枚举类型 与IEnumerable的区别: 平时操作数据库推荐使用IQueryable类型返回数据库里的数据,而不使用IEnumerable类型,因为IEnumerable适合用来操作内存里的数据,而IQueryable适合操
阅读全文
摘要:什么是Linq? 语言集成查询 Linq的作用? 简化查询,主要用于查询使用 Linq的分类: Linq to object(数组,list集合) :linq操作内存集合,内存里面的数据 Linq to sql(查询数据库用) : linq操作数据库,数据库里的数据 Linq to xml(查询xm
阅读全文
摘要:解决多条件问题 1、创建一个学生类 class Student { public int Id { get; set; }//学生编号 public string Name { get; set; }//姓名 public int Age { get; set; }//年龄 public int C
阅读全文
摘要:作用:不用继承类也可以给类添加自己的方法 使用场景:在不修改源码的情况下为其它类型增加方法 可以给任意类型增加扩展方法,不过扩展方法必须在静态类里面定义 调用:给什么类型设置就用什么类型来调用, 格式:'类型名.扩展方法名' 因为扩展方法是静态的,所以要向静态方法那样调用 给自定义类设置: publ
阅读全文
摘要:IEnumerable:可枚举类型,可迭代类型 IEnumerator:枚举器 让类实现可以遍历 字符串和数组还有集合都可以直接进行foreach遍历,是因为他们都继承了IEnumerable接口并且实现了该接口。 我们自己定义的类不能遍历,如果我们要实现可以遍历的话,就要让自定义类也实现IEnum
阅读全文
摘要:什么lamdba表达式 是一种匿名方法,定义方法时候不需要写访问区分符,方法名等等 作用:简化方法的定义 lamdba表达式语法 参数列表)=>{方法体} 定义一个无参数无返回值的方法 ()=>{} 定义一个有参数无返回值的方法 (A)=>{}; 定义一个有一个参数有返回值的方法 (A)=>{ret
阅读全文
摘要:委托 也是一种类型,特殊类型,初始化时需要一个方法支持,委托是记录方法信息的一种类型,它保存了方法的信息,调用委托的时候就是在调用实例化委托的方法。委托本质是一个方法指针,也就是方法的指针被封装了。 自定义委托 自定义委托的定义方法: public delegate +返回值+委托名称+(参数类型
阅读全文