摘要:1、发布者和订阅者 当一个特定的程序事件发生时, 程序的其他部分可以看到该事件已经发生的通知 发布订阅模式可以满足这种需求. 在这种模式中, 发布者类定义了一些类程序的其他部分感兴趣的事件 其他类可以注册, 事件发生时, 收到发布者的通知 这些订阅者类通过向发布者提供一个方法来注册, 以获取通知 当
阅读全文
摘要:匿名方法 前面的情况是方法被某个结构或者类的成员, 可以调用方法 如果方法只调用一次, 用来实例化委托, 在这种情况下, 除了创建委托的语法需要, 没有必要创建独立的具名方法, 使用匿名方法即可 匿名方法是实例化委托时内联声明的方法. class Program { delegate int Oth
阅读全文
摘要:委托 1、什么是委托 委托是持有一个或多个方法的对象, 委托与典型的对象不同, 可以执行委托, 这时候委托会执行它所持有的方法 2、概述 委托和类一样是一种用户定义类型, 但类表示的是数据和方法的集合, 而委托则持有一个或多个方法, 以及一系列预定义操作 可以把delegate看作一个包含有序方法列
阅读全文
摘要:1、Clone() Clone方法为数组进行浅复制 它只创建了数组本身的克隆. 如果是引用类型数组, 他不会赋值元素引用的对象 对于值类型和引用类型数组来说, 具有不同的结果 克隆值类型数组会产生两个独立数组 克隆引用类型数组会产生指向相同对象的两个数组 克隆方法返回object类型的引用, 它必须
阅读全文
摘要:交错数组 交错数组子数组的元素可以不同 int[][] jagArr = new int[3][]; 第一个维度的长度是3 第二个维度长度随便 (1)声明交错数组 int[][] someArr; int[][][] otherArr; 交错数组的维度可以是大于1的任意整数 和矩阵数组一样, 维度的
阅读全文
摘要:1、数组定义 元素: 数组的独立数据项是元素, 类型相同或继承自同一类型 秩/维度: 数组的维度可以为任何正数 维度长度: 每一维度的长度 数组长度: 数组中所有维度中的严肃总数 注意 数组一旦创建, 大小固定, 不支持动态数组 2、数组分类 一维数组: 可以认为是单行元素或元素向量 多维数组: 是
阅读全文
摘要:位标志 开发者使用单个字的不同位表示一组开关的紧凑方法, 称为位标志, 可以使用枚举来实现它, 步骤如下 确定需要多少个位标志, 并选择一种有足够多位的无符号类型(uint, ulong)来保存他 确定每个个位位置代表什么, 并给他们一个名称. 声明一个选中的整数类型的枚举, 每个成员有一个位位置表
阅读全文
摘要:枚举 枚举 枚举是开发者定义的类型, 与类、结构一样 与结构一样, 枚举是值类型, 因此直接存储他们的数据, 而不是分开存储成引用和数据 枚举只有一种类型的成员: 命名的整数值常量 enum TrafficL { Green, Red, Yellow } 每个枚举类型都有一个底层整数类型, 默认为i
阅读全文
摘要:1、什么是结构 结构是开发者定义的数据类型, 与类非常相似, 他们有数据成员和函数成员, 虽然与类很相似, 但是有区别 类是引用类型, 而结构是值类型 结构是隐式密封的, 他们不能派生出其他类 struct StructName { Member } 例子 struct Point1101 { pu
阅读全文
摘要:using语句 某些类型的非托管对象有数量限制或很耗费系统资源, 在代码使用完他们后, 尽快释放他们是很重要的using语句有助于简化这一过程, 并确保这些资源被适当的处理 (0)资源 指实现了System.IDisposable接口的类或结构. IDisposalbe接口中有个Dispose的方法
阅读全文
摘要:1、标签语句 标签标识符: Stament 标签语句的执行如同标签不存在永远, 仅执行Statment部分 给语句增加一个标签, 允许控制从代码的其他部分转移到该语句 标签语句只允许用在块内部 { int xyz = 0; xyz: Console.WriteLine("No problem");
阅读全文
摘要:switch case标签由关键字case和其后面的模式构成 模式可以是简单地值 也可以是简单值的表达式 也可以是一个类型 可以使用关键字when来包含一个过滤器 case Square square when square.Side > 3: Console.WriteLine($"多边形, 且边
阅读全文
摘要:运算符重载 面对用户定义类型, 运算符不知道如何重载, 需要重载运算符 运算符重载只能用于类和结构 为类或结构后重载一个运算符x, 可以声明名称为opertor x的方法并实现他的行为 例如: operator + 和 operator - 一元运算符的重载方法带一个单独的class或struct类
阅读全文
摘要:定义的类型转换 可以位自己的类和结构定义隐式转换和显式转换, 这里允许把用户定义类型的对象转换成某个其他类型, 反之亦然 隐式转换与显式转换 对于转换, 当决定在特定上下文中使用特定类型时, 如有必要, 编译器会自动执行转换 对于显式转换, 编译器只在使用显式转换运算符时才执行转换 (1)隐式转换
阅读全文
摘要:1、抽象成员 指设计被覆写的函数成员, 特征如下 必须是一个函数成员, 字段常量不可用 属性、索引器、事件、方法都可用 必须用abstracet修饰 不能实现, 代码、访问器用分号表示 abstract public void PrintStuff(string s); abstract pul
阅读全文
摘要:成员访问修饰符 所有显式声明在类声明中的成员都是互相可见的, 无论给他们声明访问等级 继承的成员不在类声明中显式声明, 所以, 继承成员对派生类的成员是可见的, 也可以是不可见的, 基类私有派生类看不见 访问级别 public private protected internal protected
阅读全文
摘要:构造函数的执行 要创建对象的基类部分, 需要隐式的调用基类的无参构造函数 继承层次链中的每个类在执行他自己的构造函数体之前执行他的基类构造函数 对象构造的顺序如下 注意 禁止在构造函数中调用虚方法 在执行基类的构造函数, 基类的虚方法会调用派生类的覆写方法, 但这是执行在派生类的构造函数方法体之前
阅读全文
摘要:变量 1、变量在内存中分配空间 以变量名对应的内存地址为起点, 以其数据类型所要求的存储空间为长度的一块内存区域 (1)值变量如何存储在内存上 内存在计算机中被分成了一个字节一个字节的区域, 其中每个8个bit构成一个字节, 每个字节有自己唯一标识 操作系统会预留一部分内存, 别的进程无法使用 用橙
阅读全文
摘要:1、类继承 通过继承可以定义一个新类, 新类纳入一个已经声明的类并进行扩展 可以使用一个已经存在的类作为新类的基础, 已存在的类称为基类(base class), 新类为派生类(derived class), 派生类成员的组成如下 本身声明中的成员 基类的成员 要声明一个派生类, 需要在类名后写基类
阅读全文
摘要:1、分部类和分部类型 类的声明可以分割成几个分部类的声明 每个分部类的声明都有一些成员的声明 类的分部类声明可以在同一文件中也可以在不同文件中 每个分部类声明必须被标注为patial class partial class MyPartClass //类名称与下部分相同 { member1 dela
阅读全文
摘要:1、对象初始化语句 扩展语法 有如下两种扩展语法, 第一种当类中没有声明构造器或者声明了无参构造器才能用 第二种当类中声明了有参构造器才能用 new ExampleClass {FieldOrProp = InitProp, FieldOrProp = InitProp, ...}; new Exa
阅读全文
摘要:1、值参数 当你使用值参数, 通过将实参的值复制到形参的方式把数据传递给方法,方法被调用时, 系统执行如下操作 在栈中为形参分配空间 将实参的值复制给形参 class MyClass { public int Val = 20; } class Program { static void MyMet
阅读全文
摘要:属性 属性代表类实例或类中数据项的成员, 使用属性就像写入或读取一个字段, 语法相同, 从语法上无法区分他们 (0)属性的特征 是命名的类成员 有类型 可以被赋值和读取 与字段不同, 属性是一个函数成员 不一定为数据存储分配内存 执行代码 属性是两个匹配的、命名的、称为访问器的方法,访问器不能直接被
阅读全文