07 2024 档案
《NET CLR via C#》---第四章(System.Object,类型转换,is和as,命名空间和程序集,运行时的相互关系)
摘要:System.Object CLR要求每个类型最终都从System.Object类型派生。由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证了一组最基本的方法。 公共方法 说明 Equals 如果两个对象具有相同的值,就返回true GetHashCode 返回对象的值
《NET CLR via C#》---第三章("运行时"解析类型引用)
摘要:"运行时"解析类型引用 首先在"C:\Users\LH89\source\repos"目录下,新建Console1工程(C#控制台) 实现简单的代码,并编译为程序集(假定名为Program.exe) using System; public class Program { static void M
《NET CLR via C#》笔记---第一章(CLR,托管模块,程序集,JIT,AOT,IL,FCL,CTS,CLS)
摘要:公共语言运行时(Comon Languague Runtitle, CLR) 是一个可由多种编程语言使用的“运行时”,CLR的核心功能(例如内存管理、程序集加载、安全性、异常处理和线程同步)可由面向CLR的所有语言使用,事实上在运行时,CLR根本不关心用哪种语言写源代码,只要编译器是面向CLR的,例
观《深入理解C#》有感---Nullable装箱和拆箱
摘要:装箱 Nullable<T>的实例要么装箱成空引用(如果没有值),要么装箱成T的一个已装箱的值(如果有值) 它永远不可能装箱成“装箱的可空int”,因为不存在这种类型 拆箱 已装箱的值可以拆箱成普通类型,或者拆箱成对应的可空类型
观《深入理解C#》有感---泛型可变性的缺乏
摘要:泛型不支持协变性,数组支持,举个例子: 要注意如下代码: animals2[0] = new Dog(); 虽然编译能够通过,但运行后就会报错。本书中,作者给了它俩支持协变性的不同原因,以下是原话叙述。 泛型:泛型的设计者认为,这比编译时就失败还要糟糕——静态类型的全部意义就在于在代码运行之前找出错
观《深入理解C#》有感---泛型的反射应用
摘要:泛型的完整类型名称 完整名称+`+参数数量+[ 参数类型 + ],例如: static void Main(string[] args) { Console.WriteLine(typeof(List<>)); // -> System.Collections.Generic.List`1[T] C
观《深入理解C#》有感---List对于ArrayList的优化提升
摘要:相对List<byte>为例,ArrayList如果想要存储byte,所要付出的代价如下(假定在32位CLR): byte装箱消耗:8字节(装箱后的对象头,通常8字节,包括同步块索引和类型指针) 存储数据消耗:4字节(1字节存储,3字节填充(内存对齐)) 存储引用消耗:4字节 所以每个对象至少16字
观《深入理解C#》有感---泛型类中的静态字段
摘要:就像实例字段从属于一个实例一样,静态字段从属于声明它们的类型。不管从该类型中创建了多少实例,都有且只有这一个静态字段。 那对于泛型类中的静态字段呢? 答案是:每个封闭类型都有它们自己的静态字段集,例如以下代码: public class Blue<T> { public static string
观《深入理解C#》有感---泛型五种约束
摘要:一、引用类型约束 class Sample<T> where T : class 类型实参可以是: 任何类: Sample<string> 接口: Sample<IDisposable> 数组: Sample<int[]> 委托: Sample<Action> 二、值类型约束 class Sampl
观《深入理解C#》---委托和事件的区别
摘要:委托 委托封装了包含返回类型和一组参数的行为 委托实例是不易变的(类似string) 每个委托都包含了一个调用列表 事件 事件是对委托的封装,是一种特殊的委托,主要用于发布-订阅模式。事件提供了一种机制,使对象可以向其他对象通知发生了某种动作 事件通常在类内部声明,并通过该类的方法触发。在外部,其他
观《深入理解C#》有感--- 排序搜索
摘要:关于在无序列表中,找到所需数据的五种写法 class Program { class Product { public string name; public int price; public override string ToString() { return name; } } static
ilruntime原理浅究(一)
摘要:AOT和JIT: AOT(Ahead Of Time):指在程序运行前,将源码编译成目标平台的机器码的过程。 特点: 快速启动:由于没有运行时编译步骤,程序启动速度更快 运行时性能更好:减少了JIT编译器的运行时开销,提高了整体性能 代码体积小:可以进行全局优化,能生成更紧凑的代码 JIT(Just