[Clr via C#读书笔记]Cp7常量和字段】的更多相关文章

Cp7常量和字段 常量 常量在编译的时候必须确定,只能一编译器认定的基元类型.被视为静态,不需要static:直接嵌入IL中: 区别ReadOnly 只能在构造的时候初始化,内联初始化. 字段 数据成员,用到的动态内存是在类型对象中分配的. 注意,当引用类型的字段标记为readonly的时候,不可改变的是引用本身,而不是引用的那个对象,这个对象内部的成员是可以改变的.…
Cp6类型和成员基础 成员 常量:字段(静态字段和实例字段):实例构造器:类型构造器(用于静态字段的构造):方法(静态方法和实例方法):操作符重载(本质是一个方法):转换操作符:属性(本质还是方法):事件(委托):类型(嵌套类): 类型的可见性 public,private,protected,internal,sealed,默认的类是internal. 友元程序集 这部分看看就行了 成员的可访问性 private protected(对应clr是Family),internal(对应clr是a…
前言 近段时间工作需要用到了这块知识,遂加急补了一下基础,CLR中这一章节反复看了好多遍,得知一二,便记录下来,给自己做一个学习记录,也希望不对地方能够得到补充指点. 1,.托管代码和非托管代码的区别 2.托管堆是什么? 3.托管堆基础,托管堆分配资源 4.内存泄漏 内存溢出.内存损坏 5.C# new操作符分配资源 6.垃圾回收算法 7.代:提升性能 8.垃圾回收触发条件 9.大对象 10.使用需要特殊清理的类型 11.使用包装了本机资源的类型 一.托管代码和非托管代码的区别 托管代码:执行过…
         前言 孔子说:温故而知新,可以为师矣.所以对于学习过的知识要多复习,并且每一次复习都要尽可能的去扩展,而不是书本上的几句理论知识.很多人都喜欢分享自己的学习内容,记录下生活的点点滴滴,我也很喜欢这种做法,昨天用了一天的时间,翻了很多的博客,看了不少GIT上的开源代码分享.还有亦师亦友的同事给出的建议.我今后也会多多分享一些学到的东西. 先回顾一下C#最基础的内容,在过去的一年开发,随着出现了很多的错误,让我明白了基础的重要性,程序员如果不能很好的理解他所用的语言基础,那么就会有…
常量 常量是值从不变化的符号.定义常量符号时,它的值必须能在编译时确定.确定后,编译器将唱两只保存在程序集元数据中.使用const关键字声明常量.由于常量值从不变化,所以常量总是被视为类型定义的一部分.换言之,常量总是被视为静态成员,而不是实例成员.常量的值直接潜入代码,在运行时不需要为常量分配任何内存. 字段 字段是一种数据成员,其中容纳了一个值类型的实例或者一个对引用类型的引用.由于字段存储在动态类型中,所以它们的值在运行时才能获取.字段还解决了常量存在的版本控制问题.字段可以是任何数据类型…
1.常量是值从不变化的符号.只能定义编译器识别的基元类型的常量.如:Boolean,Char,Byte,SByte,Int16,UInt16,Int32,UInt32,Int64,Single,Double,Decimal和String; 2.c#也允许定义非基元类型的常量,但是前提是把值设为null. 3.编译器将常量保存到程序集元数据中. 4.常量总是被视为静态成员,而不是实例成员.定义常量将导致创建元数据. 5.代码引用常量符号时,编译器在定义常量的程序集的元数据中查找该符号,提取常量的值…
widows如何执行I/O操作      构造调用一个FileStream对象打开一个磁盘文件-----FileStream.Read方法从文件中读取数据(此时线程从托管代码转为本地/用户模式代码)----Read在内部调用win32ReadFile函数-----ReadFile分配一个小的数据结构(I/O请求包,简称IRP)----IRP请求结构初始化(包括:一个文件句柄,文件一个偏移量,一个byte[]数组地址,要传输的字节数,以及其他常规性内容)------初始化后ReadFile将线程从…
线程池基础 1,线程的创建和销毁是一个昂贵的操作,线程调度以及上下文切换耗费时间和内存资源. 2,线程池是一个线程集合,供应你的用程序使用. 3,每个CLR有一个自己的线程池,线程池由CLR控制的所有的AppDomain共享. 4,CLR初始化的时候,线程池没有线程的. 5,线程池维护一个操作请求队列.当应用程序想要执行一个一步操作的时候,就调用某个方法.将记录项(empty)追加到线程池队列中,然后线程池代码从队列中提取这个记录项,然后将记录项派遣(dispatch)给一个线程池的线程.当线程…
#1 CLR寄宿: 开发CLR时,Microsoft实际是将他实现成包含在一个dll中的COM服务器.Microsoft为CLR定义了一个标准的COM接口,并为该接口和COM服务器分配了GUID.安装.NET Framework时,代表CLR的COM服务器在Windows注册表中注册. 任何Windows应用程序都可以寄宿CLR,非托管宿主应该调用MetaHost.h文件中声明的CLRCreateInstance函数,该函数是在MSCoreEE.dll文件中实现的,该dll被称为"垫片"…
#1 加载程序集 Assembly.Load: public class Assembly { public static Assembly Load(AssemblyName assemblyRef); public static Assembly Load(String assemblyString); } 在内部,Load导致CLR向应用程序集应用一个版本绑定重定向策略,并在GAC中查找程序集.如果传递的是一个弱命名程序集,不会应用版本绑定重定向策略,也不会去GAC中查找程序集. AppD…