![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CLR Via C#
Damon316
这个作者很懒,什么都没留下…
展开
-
将托管模块合并成程序集
CLR实际是和程序集工作,程序集(assembly)是抽象概念 程序集:一个或多个模块/资源文件的逻辑性分组,是重用安全性和版本控制的最小单元。 编译器会默认将生成的托管模块生成程序集 程序集既可以是EXE,也可以是DLL(其中也含有可执行的文件)原创 2016-05-13 16:11:54 · 408 阅读 · 0 评论 -
方法
实例构造器和类(引用类型)构造器: 初始化对象。创建引用类型的对象时,首先为实例的数据字段分配内存,然后进行初始化。 构造引用类型的对象的时候,在调用类的构造函数的时候,为对象的内存总是先归零,没有被构造器显示重写的都会办证获得0或者null值**我们可以知道由于是本类的构造函数,当然不可以被其他类继承(类名都不一样),所以会禁止使用以下修饰符:virtual,new,override,seal原创 2016-06-17 15:51:00 · 296 阅读 · 0 评论 -
参数
可选参数和命名参数 class Program { private static int s_n = 0; private static void M(int x = 9, string s = "A", DateTime dt = default(DateTime), Guid guid = new Guid()) {原创 2016-06-17 17:26:01 · 396 阅读 · 0 评论 -
属性
C#将有参属性称为索引器 无参属性是平常大家口里叫的属性无参属性面向对象设计和编程的重要原则之一就是数据封装,意味着类型的字段永远不应该公开(public),否则很容易因为不恰当使用字段而破坏对象的状态**声明属性而不提供get/set方法,C#会自动为你声明一个私有字段 **属性不能作为OUT,Ref参数传给方法,而字段可以 **一定要记住属性是个方法对象初始化器String s = new原创 2016-06-21 09:09:11 · 328 阅读 · 0 评论 -
泛型
泛型是CLR提供的一种特别的机制,它支持算法重用 Public class List,< T > : IList< T >,ICollection< T >,IEnumerable< T > 泛型的几大优势: 类型安全:不符合兼容类型的对象会造成编译时错误 性能:没有泛型的识货,一般所有的成员都要定义成操作Object数据类型吗。当用算法来操作值类型的实例的时候,肯定就要对值类型进行封装操作(我原创 2016-06-21 09:48:16 · 346 阅读 · 0 评论 -
接口
接口可以认识成一种缩水版的继承机制,它是对一组方法签名进行来统一命名(不提供任何实现)。类继承的重要特点:只要是有基类实例的地方,都能使用派生类型的对象,都能使用派生类型的对象原创 2016-06-21 10:26:04 · 285 阅读 · 0 评论 -
字符、字符串和文本处理
在.NET Framework中,字符总是表示成16位的Unicode代码值,System.Char类型提供了两个只读常量字段:MinValue(定义成’\0’)和MaxValue(定义成’\uffff’) 转型(张志类型转化):最简单,效率最高的 char c =(char)65 使用Convert:提供静态方法来实现Char和数值类型的相互转换 char c = Convert.tochar原创 2016-06-21 16:07:58 · 563 阅读 · 0 评论 -
枚举类型和位标志
Internal enum Color{ white, //赋值0 Red, //赋值1 Green, ... Blue, ... Orange ... } 使用枚举理由: 使程序荣易读,程序员就不用时常念叨white是0之类的,有了枚举类型,一步了然。 枚举是强类型,简单点:假设你在c#代码中,你定义了一个整型变量后,就不能赋一个字符型数据给这个变量 (除非你用原创 2016-06-21 17:12:05 · 667 阅读 · 0 评论 -
委托
.NET Freamwork通过委托来提供回调函数机制。我们可以利用回调方法来获得各种各样的通知原创 2016-06-21 17:29:02 · 274 阅读 · 0 评论 -
Lambda表达式详解(例子详解)
前言 1、天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西。 2、夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅。据说它是微软自c#1.0后新增的最重要的功能之一。 lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者转载 2016-06-22 15:32:02 · 2131 阅读 · 0 评论 -
常量和字段
常量是值不会变化的符号,定义在常量符号的时候,它的值是需要一开始就定义的。因为编译器是将常量会保存到元数据中去,所以编译器只能识别基元类型的常量,假如你要设定非基元类型的常量变量,要先将其设置成为Nullpublic const SomeTyoe Empty = null;因为常量值从来不变化,所以常量值是作为类型的一部分的。换一种角度,常量总是被视为静态成员,一旦定义常量值就会产生元数据。由于常量原创 2016-06-16 16:16:41 · 1105 阅读 · 0 评论 -
程序集加载和反射
程序集的加载JIT编译器器将IL代码编译成本地代码时, 会查看IL代码中引用了哪些类型。在运行过程中,JIT编译器利用程序集的TypeRef和AssemblyRef元数据表来确定哪一个程序集定义了所引用的类型,然后JIT编译器将对应程序集加载到AppDomain中,在内部,CLR使用System.Reflection.Assembly类的静态方法Load来尝试加载一个程序集。然而如果我们想动态加载一原创 2016-07-02 08:24:17 · 559 阅读 · 0 评论 -
类型和成员基础
常量:数据值恒定不变的符号 字段:可读也可写的数据值 属性:用简单的字段风格设置或查询对象的逻辑状态 无论什么编程语言,编译器都能将源代码解析成元数据和IL语言,所有生成元数据的格式都是一样的,这就是为什么CLR成为“公共语言进行时”的原因,因为元数据是所有语言都生成和是使用的公共信息。所以正是有来元数据,我们才能无缝的在写一种语言的同时接壤另一种语言。 · class 类型演示原创 2016-06-16 14:46:24 · 350 阅读 · 0 评论 -
类型基础
CLR要求每个类型最终都是从System.Object类型派生,所以每个类型的每个对象都保证拥有Object的最基本的方法:Equals,GetHashCode,ToString(this.GetType().FullName),GetType(可以指出调用该方法的对象是什么类型,是非虚方法,防止类重写该方法,隐瞒真实类型),MemberwiseClone(相当于镜像,返回对新实例的引用),Fin原创 2016-05-13 16:32:46 · 307 阅读 · 0 评论 -
类型转换
C#不要求任何特殊语法即可将对象转换成它的基类型,因为向基类型转换被CLR默认为安全的隐式转换 C#的is和as操作符: 1)is 操作符检查对象是否兼容于指定类型,返回boolean值true或false(is操作符永远不会抛出异常) 2)as操作符类似于强制类型转换(一般紧接检查生成的引用是否为Null)原创 2016-05-14 10:14:05 · 400 阅读 · 0 评论 -
命名空间和程序集
首先要知道的是,编译器要保证引用的每个类型都确实存在,也就是说要调用确实存在的方法,才能向方法传递正确数量的实参,保证实参的类型确实满足方法签名里设置的参数类型。 在C#中,namespase的作用:告诉编译器为源代码中出现的每个类型名称加命名空间名称前缀原创 2016-05-14 13:30:16 · 365 阅读 · 0 评论 -
异常和状态管理
事实上,许多面向对象的构造——构造器,获取和设置属性,添加和删除事件,调用操作符重载和调用转换操作等等(我们在写代码的时候总是想当然的写一大串,但是要知道很多代码只是在理想状态下没有任何操作失败才可能执行) 由于异常基础部分已经十分明了,所以这里就不一一赘述,只是简单阐述一些之前没有注意到的地方####**:**catch()的这个圆括号中的表达式称为捕捉类型。C#要求它必须是System.Exce原创 2016-06-24 15:18:46 · 346 阅读 · 0 评论 -
CLR的执行模型
CLR:Commin Language Runtime 是一个可由多种编程语言使用的运行时,核心功能(内存管理,程序集加载,安全性,异常处理和线程同步),它可以由面向CLR的任何语言来使用。例如,“运行时”使用异常来报告错误,面向它的任何语言都用异常来报告错误。 如下图:用支持CLR的任何语言创建源代码,然后用对应的编译器来检查语法和分析源代码。结果统一为托管模块(托管模块都需要CLR才能执行)原创 2016-05-13 14:17:14 · 520 阅读 · 0 评论 -
PE文件,程序集,托管模块,元数据
CLR实际是和程序集工作,程序集(assembly)是抽象概念 程序集:一个或多个模块/资源文件的逻辑性分组,是重用安全性和版本控制的最小单元。 编译器会默认将生成的托管模块生成程序集 程序集既可以是EXE,也可以是DLL(其中也含有可执行的文件) 元数据是由几个表构成的二进制块,有三种元数据表:定义表,引用表和清单表。 所谓定义表,主要就是对本模块内部的一些属性,方法什么的原创 2016-06-03 15:45:11 · 1003 阅读 · 0 评论 -
类型基础
CLR要求每个类型最终都是从System.Object类型派生,所以每个类型的每个对象都保证拥有Object的最基本的方法:Equals,GetHashCode,ToString(this.GetType().FullName),GetType(可以指出调用该方法的对象是什么类型,是非虚方法,防止类重写该方法,隐瞒真实类型),MemberwiseClone(相当于镜像,返回对新实例的引用),Fina原创 2016-06-03 16:13:31 · 280 阅读 · 0 评论 -
方法
实例构造器(构造函数)和类(引用类型)构造器是将实例初始化为良好状态的特殊方法。比如:创建引用类型的对象的时候,首先为对象会分配内存地址,/然后初始化对象的附加字段(类型对象指针和同步块索引)/,然后调用实例构造器来设置对象的初始化状态。 要注意的是 在调用构造函数之前,引用类型的变量的初始值总为0或为Null值 如果父类没有提供无参的构造函数,那么子类必须显示调用一个父类的构造函数 `inter原创 2016-06-04 16:35:11 · 342 阅读 · 0 评论 -
CLR寄宿和APPDomain
我的妈呀,终于看到这了!!!!! 寄宿 寄宿(hosting)使任何程序都能利用CLR的功能。特别要指出的是,它使现有的应用程序至少能部分使用托管代码编写(这句话暂时不太理解)。所以可以总结出一点:寄宿可以让代码具有可拓展性,但是一旦将第三方DLL加载到进程中一定以为着有一定的风险,毕竟DLL代码很容易破坏应用程序的数据结构和代码(DLL总会想尽一切办法去访问它没有权利访问的资源) AppD原创 2016-06-28 13:01:43 · 1068 阅读 · 0 评论 -
可空值类型
C#对可空类型的支持Int32?等价于Nullable< Int32 > 不仅如此,C#在此基础上为可空实例上还允许执行类型转化: Int32? a = 5; Int32? b = null; Int32 c = (Int32)a; //将可空类型的a强制转换成非可空类型 Double? d = 5; //将Int32类型的值5转型成double,这个时候的d = 5.0 Doubl原创 2016-06-23 17:18:06 · 399 阅读 · 0 评论