代码改变世界

随笔分类 -  经典解读《C#高级编程》

解读经典《C#高级编程》最全泛型协变逆变解读 页127-131.章4

2019-03-12 17:42 by 圣殿骑士18, 462 阅读, 收藏, 编辑
摘要: 前言 本篇继续讲解泛型。上一篇讲解了泛型类的定义细节。本篇继续讲解泛型接口。 泛型接口 使用泛型可定义接口,即在接口中定义的方法可以带泛型参数。然后由继承接口的类实现泛型方法。用法和继承泛型类基本没有区别。 不变、协变和逆变 在.Net4.0之前,泛型接口是不变的。.Net4.0通过协变和逆变为泛型 阅读全文

解读经典《C#高级编程》泛型 页122-127.章4

2019-03-05 17:46 by 圣殿骑士18, 471 阅读, 收藏, 编辑
摘要: 前言 本篇继续讲解泛型。上一篇讲解了泛型类的创建。本篇讲解泛型类创建和使用的细节。 泛型类 上篇举了个我产品中用到的例子,本篇的功能可以对照着此案例进行理解。 默认值 T作为泛型类型,有时候会需要取默认值。我们知道,引用类型的默认值是null,数字类型的默认值是0,但泛型类型T既可能是引用类型,也可 阅读全文

解读经典《C#高级编程》泛型 页114-122.章4

2019-02-28 17:40 by 圣殿骑士18, 440 阅读, 收藏, 编辑
摘要: 前言 本章节开始讲解泛型。.Net从2.0开始支持泛型,泛型不仅是C 的一部分,也与IL代码紧密集成。所以C 中泛型的实现非常优雅。相对于C ,Java是后期引入的泛型,受限于最初的设计架构,就实现的比较别扭,遭到不少人的吐槽,比如“类型擦除”问题。使用C 还是幸福的。 使用泛型最典型的应用,可能是 阅读全文

解读经典《C#高级编程》继承 页107-113.章4

2019-02-22 18:10 by 圣殿骑士18, 550 阅读, 收藏, 编辑
摘要: 前言 本章节开始讲接口。 接口 接口的声明很像抽象类,有方法的声明但无方法体。但它比抽象类限制更多。和类比起来,接口的定义有众多限制。 接口只能包含声明,而无方法体 接口只能包含方法、属性、索引器、事件的声明。即不能有:构造函数、字段、操作符重载 成员不允许声明修饰符。接口默认就是public的。 阅读全文

解读经典《C#高级编程》第七版 Page100-107.继承.Chapter4

2019-01-31 17:42 by 圣殿骑士18, 476 阅读, 收藏, 编辑
摘要: 前言 本章节继续讲实现继承。 实现继承 密封类和密封方法 密封类和方法的概念很简单,就是为了不允许类和方法被继承和扩展。不允许扩展一般的原因有: 如果类或者方法被扩展,可能会导致类库执行错误 因为版权原因,不允许第三方随意扩展该类 .Net库有很多密封类,使用者不能随意扩展。我猜测这么做可能是因为设 阅读全文

解读经典《C#高级编程》第七版 Page94-100.继承.Chapter4

2019-01-22 17:39 by 圣殿骑士18, 651 阅读, 收藏, 编辑
摘要: 前言 今天,我们开始进入第四章的解读。本章讲的是继承。要做稍微复杂一些的开发,便不可避免的会使用到继承。本篇文章我们主要解读“实现继承”。 另外,从本文开始,我开始使用Markdown格式来书写文章,它可以提供更好的布局风格和代码样式。 继承的类型 我们可能都知道,C++支持多继承,但Java和C 阅读全文

解读经典《C#高级编程》第七版 Page79-93.对象和类型.Chapter3

2019-01-11 17:45 by 圣殿骑士18, 512 阅读, 收藏, 编辑
摘要: 前言 本篇我们继续讲解本章其余的部分:构造函数、只读字段、匿名类型、结构详解、部分类、静态类、Object类、扩展方法,等。 01 类 构造函数 构造函数是一种特殊的方法: 当我们把构造函数看成方法后,构造方法间的互调用,我们可能会认为和方法一样,比如: TestMain(){ } TestMain 阅读全文

解读经典《C#高级编程》第七版 Page68-79.对象和类型.Chapter3

2019-01-10 17:39 by 圣殿骑士18, 538 阅读, 收藏, 编辑
摘要: 前言 新年好,本篇开始进入第三章,《对象和类型》,深刻理解C#的对象,对于使用好.Net类库非常重要。 01 类和结构 从使用角度看,结构和类的区别很小,比如,将结构定义转换为类,只需要将关键字struct改为class即可。创建结构的时候,也同样可以用关键字new。它们的本质区别是,结构是值类型, 阅读全文

解读经典《C#高级编程》第七版 Page50-68.核心C#.Chapter2

2019-01-04 17:35 by 圣殿骑士18, 640 阅读, 收藏, 编辑
摘要: 前言 本篇讲述Main方法,控制台,注释,预处理指令,编程规范等。这些概念比较琐碎,为避免长篇大论,主要以列举要点的方式来说明。 01 Main方法 # 如果用csc.exe命令行编译,要带上参数 /main 并指定入口方法。命令行编译还有很多功能,比如编译类库等,但平常我们并不会用到命令行,了解原 阅读全文

解读经典《C#高级编程》第七版 Page45-50.核心C#.Chapter2

2019-01-03 17:57 by 圣殿骑士18, 573 阅读, 收藏, 编辑
摘要: 前言 本篇讲述枚举和名称空间。 01 枚举 首先需要明确枚举的概念:枚举是用户定义的整数类型。使用枚举的目标是,使用一组容易记忆的名称,来使得代码更容易编写和维护。 我们对比枚举的定义和类的定义,会发现它们有像的地方,有不像的地方,这不同之处体现了枚举的特性。我们按下图举例: int value = 阅读全文

解读经典《C#高级编程》第七版 Page38-45.核心C#.Chapter2

2018-12-28 17:38 by 圣殿骑士18, 688 阅读, 收藏, 编辑
摘要: 前言 控制流是语言中最基础的部分,我们不谈具体的细节,只讲讲一些关键和有趣的点。 01 流控制 条件语句:if, else if, else if语句的使用非常值得细讲,如何是好的使用习惯。有一点非常重要,就是尽可能的避免太多层次的嵌套,这将带来可读性灾难。我自己的原则是,if嵌套一般不超过2层,最 阅读全文

解读经典《C#高级编程》第七版 Page32-38.核心C#.Chapter2

2018-12-27 10:57 by 圣殿骑士18, 238 阅读, 收藏, 编辑
摘要: 前言 接下来讲讲预定义数据类型。关于数据类型,其实是非常值得透彻研究的。 01 预定义数据类型 值类型和引用类型 C#将把数据类型分为两种,值类型和引用类型,值类型存储在堆栈上,引用类型存储在托管堆上。因此,对于值类型,如果: Int a = 1; Int b = a; 那么内存中就有两份的值1。 阅读全文

解读经典《C#高级编程》第七版 Page20-32.核心C#.Chapter2

2018-12-25 13:20 by 圣殿骑士18, 421 阅读, 收藏, 编辑
摘要: 前言 讲到核心C#的语法,其实很难讲,因为大部分是基础知识。如果只讲入门的基础知识,那细节又多,意义也不大。我们就不讲一般性的内容,而是找一些有趣的点,展开讲讲。 01 Hello World Hello World 一般开始编程的开头,都是写一个Hello World程序,这本书也是不能免俗。我们 阅读全文

解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page13-20

2018-12-20 06:53 by 圣殿骑士18, 313 阅读, 收藏, 编辑
摘要: 01 程序集 程序集是包含编译好的、基于.Net Framework的代码逻辑单元。一般来说,在Visual Studio中的一个项目即一个程序集,而一个项目中包含多种不同的代码文件。程序集分为可执行程序集和库程序集,比如一个Winform项目就编译为可执行程序集,而Winform项目所包含的其他库 阅读全文

解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page6-13

2018-12-18 20:16 by 圣殿骑士18, 297 阅读, 收藏, 编辑
摘要: 01 中间语言(IL) .Net中间语言(IL)的特性,很大程度上来自于要支持多语言互操作性。要支持多语言互操作性,是因为微软想搞一个大事情,将它的老产品线VB和VC++,VJ++都装入.Net架构中。要支持多语言互操作,就需要实现这些基本功能: 1) 继承:一种语言的类能继承另一种语言编写的类。 阅读全文

解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page1-6

2018-12-14 15:36 by 圣殿骑士18, 334 阅读, 收藏, 编辑
摘要: 前言 大家好。这是开通本号的第一篇文章。从事IT行业已经20年了,从使用PowerBuilder做企业信息系统开始,做了七八年开发,然后转型Java不是很成功,从07年之后,我转做产品经理,机缘巧合,在2012年之后,又接触到.Net编程,在2016年正式回归到开发的行列,整整10年。最近几年,在技 阅读全文