合集-《深入理解C#》读书笔记
观《深入理解C#》有感--- 排序搜索
摘要:关于在无序列表中,找到所需数据的五种写法 class Program { class Product { public string name; public int price; public override string ToString() { return name; } } static
观《深入理解C#》---委托和事件的区别
摘要:委托 委托封装了包含返回类型和一组参数的行为 委托实例是不易变的(类似string) 每个委托都包含了一个调用列表 事件 事件是对委托的封装,是一种特殊的委托,主要用于发布-订阅模式。事件提供了一种机制,使对象可以向其他对象通知发生了某种动作 事件通常在类内部声明,并通过该类的方法触发。在外部,其他
观《深入理解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#》有感---Nullable装箱和拆箱
摘要:装箱 Nullable<T>的实例要么装箱成空引用(如果没有值),要么装箱成T的一个已装箱的值(如果有值) 它永远不可能装箱成“装箱的可空int”,因为不存在这种类型 拆箱 已装箱的值可以拆箱成普通类型,或者拆箱成对应的可空类型
观《深入理解C#》有感---泛型可变性的缺乏
摘要:泛型不支持协变性,数组支持,举个例子: 要注意如下代码: animals2[0] = new Dog(); 虽然编译能够通过,但运行后就会报错。本书中,作者给了它俩支持协变性的不同原因,以下是原话叙述。 泛型:泛型的设计者认为,这比编译时就失败还要糟糕——静态类型的全部意义就在于在代码运行之前找出错