![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#本质论
文章平均质量分 62
masf469321580
这个作者很懒,什么都没留下…
展开
-
第九章 良构类型
1、垃圾回收 垃圾回收是“运行时”的重要功能,作用是回收不再被引用的对象所占的内存。这里回收的只是引用和内存,不包括数据库连接、网络端口、句柄以及硬件端口等。 在一次垃圾回收周期开始的时候,它识别所有的根引用(静态变量、CPU寄存器以及局部变量或者参数实例)。基于此列表,垃圾回收可以遍历每个根引用所标识的树形结构,并递归确定所有根引用指向的对象。这样,垃圾回收就可以识别出所有可达对象。 执行原创 2017-09-21 09:58:40 · 564 阅读 · 0 评论 -
第十二章 委托和Lambda表达式
1、委托 委托类似与C++语言中的函数指针,委托可以指向方法的引用。从数据类型来说,委托和类一样,是一种自定义数据类型。 1.1 委托的声明 使用delegate关键字声明委托类型: 访问限定符 delegate 返回值类型 函数名(参数类型 参数名, ...); public delegate void MyDel(int x); 1.2 委托的实例化 实例化委托需要一个与委托原创 2017-09-21 10:00:42 · 236 阅读 · 0 评论 -
第六章 继承
1、基类与派生类之间的转换 派生类可隐式的转换为它的基类。相反,基类向派生类的转换要求显式的转型操作符,因为转换可能失败。 虽然编译器允许可能有效的显式转换,但“运行时”会对转换进行检查,如果转换非法,则会引发异常。 public class PdaItem : object { } public class Contact : PdaItem { } public class原创 2017-09-21 09:57:22 · 190 阅读 · 0 评论 -
第十八章 多线程处理
1、多线程基础 1.1 基本概念 进程:进程是操作系统中的一个基本概念,进程包含了一个程序运行所需的资源,一个进程包含多个线程。线程:线程是进程的基本执行单元,进程入口执行的第一个进程称为主线程。任务:任务是一个工作单元,目的是生成结果值,或产生想要的效果。任务代表需要执行的一个作业,而线程是代表这个作业的工作者。线程池:多个线程的集合,决定如何处理线程分配的逻辑。 1.2 多线程的性能原创 2017-09-21 10:04:03 · 328 阅读 · 0 评论 -
第十五章 使用查询表达式的LINQ
查询表达式是C#3.0中添加的一种新语法。查询表达式和SQL风格非常相近的语法,使用查询表达式可以将许多查询操作符转换成更容易理解的代码。 1、查询表达式概述 查询表达式包括以下子句: from子句:指定查询操作的数据源和范围变量where子句:指定拆选元素的逻辑条件select子句:指定查询结果的类型和表现形式orderby子句:对查询结果进行排序操作,包括升序和降序 1.1 筛选和原创 2017-09-21 10:03:01 · 205 阅读 · 0 评论 -
第十七章 反射、特性和动态编程
1、反射 反射是能在运行时获取程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员信息。通过反射可以实现从对象外部了解对象内部结构的功能。 在以前,代码被编译成机器码,关于代码的所有信息(比如类、方法名等)都会被丢弃,但C#编译成CIL时,它会维持关于代码的大部分信息。通过反射可以得到这些信息。 1.1 反射主要用到的类以及用途 1.1.1 System.Reflection原创 2017-09-21 10:03:29 · 223 阅读 · 0 评论 -
第十四章 支持标准查询操作符的集合接口
1、集合接口 1.1 IEnumerator和IEnumerable 1.2.1 IEnumerator接口 IEnumerator接口定义了遍历集合的基本方法,MoveNext()方法从集合的一个元素移动到下一个元素,如果越过集合末尾则返回false。Current是只读成员,用于返回当前元素。Reset()方法一般会抛出异常,所以一般不会调用。 public Interface IEn原创 2017-09-21 10:02:03 · 301 阅读 · 0 评论 -
第八章 值类型
1、结构 结构是值类型,不是引用类型 结构中可以包含属性、字段、方法和构造器,但不可以包含用户定义的默认(无参)构造函数。 每个结构会自动生成一个无参构造函数,将每个字段进行初始化为各自的默认值。因为编译器会自动初始化所有字段,所以,在声明字段时候不允许对字段进行赋值。 struct Angle { // 声明的同时初始化结构的字段会造成错误 int _Degre原创 2017-09-21 09:58:18 · 167 阅读 · 0 评论 -
第五章 类
1、面向对象 面向对象主要有三个主要特征:封装、继承和多态。 1.1 封装 封装的目的是隐藏细节,使数据不会因为不慎被修改,易于代码理解和维护。 1.2 继承 继承的目的是代码重用,派生类继承基类的成员,可以修改继承的成员,也可以创建新的成员。 1.3 多态 多态的目的是接口重用,共享同一个接口,却能得到不同的实现。 2、静态成员 2.1 静态构造器 静态构造器不能被“显原创 2017-09-21 09:56:40 · 213 阅读 · 0 评论 -
第四章 方法和参数
1、命名空间 命名空间是一种分类机制,用于组合功能相关的所有类型。命名空间支持分级,级数可以任意,例如:Microsoft.Win32.NetWorking。 命名空间主要用于按照功能组织类型,以便更好的理解和查找类型。除此之外,命名空间还有助于防止类型名次冲突。 2、using 2.1 using指令 使用完全限定的命名空间名称太长,使用using指令可以在程序中直接使用命名空间原创 2017-09-21 09:55:45 · 239 阅读 · 0 评论 -
第二章 数据类型
1、字符串 1.1 字符串是不可变的 string类的关键特征在于它不可变的。当修改字符串的值时会新建一个字符串,例如: string str = "abc"; System.Console.WriteLine(str + "def"); str+"def"会创建一个新的字符串,而不是在原str上进行修改。 1.2 System.Text.StringBuilder 当频繁的处理字符原创 2017-09-21 09:55:11 · 190 阅读 · 0 评论 -
第一章 C#概述
1、基本概念 C#基于C语言的特性设计。C#是更大、更复杂的执行平台——公共语言基础结构(Common Language Infrastructure,CLI)的一部分。 C#是区分大小写的语言。 C#编译器允许为C#源代码文件使用任何文件扩展名,但一般使用.cs。 关键字:虽然罕见,但关键字附加“@”前缀可作为标识符使用,例如@return、@throw() 2、托管执行和公共语言基础原创 2017-09-21 09:53:06 · 260 阅读 · 0 评论 -
第七章 接口
接口是实现多态的一种重要的手段。 1、定义接口 接口中不包含实现部分,只包含声明部分。接口中不能声明字段,只能是方法,或属性,而属性不能有实现部分。 接口所有的成员都是公有的,C#不允许为接口成员使用访问修饰符。 一旦类声明实现接口,则该类必须实现接口的所有成员。抽象类允许提供接口成员的抽象实现。 接口不能被实例化,不能通过new创建接口。只有实例化实现接口的类型,才能使用接口的实例。原创 2017-09-21 09:57:58 · 184 阅读 · 0 评论 -
第十一章 泛型
1、泛型概述 使用泛型可以创造出更灵活的类,定义这种参数化类,可以使内部算法相同,但数据类型会跟随类型参数而变。 优点: 类型安全:指定类型参数后,编译时会进行类型检查。性能优化:减少性能消耗,避免装箱和拆箱操作。代码重用:避免编写大量重复的代码。 2、泛型类的使用 2.1 定义泛型类 public class Stack { private T[] _Item原创 2017-09-21 09:59:30 · 190 阅读 · 0 评论 -
第十三章 事件
1、事件的作用 事件是对委托的封装,如同属性对字段的封装。封装后可以在委托上实现更复杂的逻辑。 1.1 封装订阅 委托允许使用“=”对其进行赋值,但向一个委托实例赋值多个委托时,使用“=”会造成覆盖之前的委托。事件只支持“+=”或“-=”对事件进行赋值 1.2 封装发布 委托可以在其他类进行访问,而事件可以确保只有包容类才能触发事件通知。 2、事件声明 通过event关键字声明原创 2017-09-21 10:01:18 · 407 阅读 · 0 评论