19 圣殿骑士18

尚未进行身份认证

我要认证

产品经理,需求分析师,程序员,DBA,全栈打杂

等级
TA的排名 9w+

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

前言本篇继续讲解泛型。上一篇讲解了泛型类的定义细节。本篇继续讲解泛型接口。泛型接口使用泛型可定义接口,即在接口中定义的方法可以带泛型参数。然后由继承接口的类实现泛型方法。用法和继承泛型类基本没有区别。不变、协变和逆变在.Net4.0之前,泛型接口是不变的。.Net4.0通过协变和逆变为泛型接口和泛型委托增加了重要的扩展。注:本书总体非常好,但在协变和逆变方面,我认为是有缺陷的。我...

2019-03-12 17:46:00

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

前言本篇继续讲解泛型。上一篇讲解了泛型类的创建。本篇讲解泛型类创建和使用的细节。泛型类上篇举了个我产品中用到的例子,本篇的功能可以对照着此案例进行理解。/// <summary>/// 单一事务处理服务,用于单表的数据读写事务/// </summary>/// <typeparam name="TViewModel"></typepara...

2019-03-05 17:48:26

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

前言本章节开始讲解泛型。.Net从2.0开始支持泛型,泛型不仅是C#的一部分,也与IL代码紧密集成。所以C#中泛型的实现非常优雅。相对于C#,Java是后期引入的泛型,受限于最初的设计架构,就实现的比较别扭,遭到不少人的吐槽,比如“类型擦除”问题。使用C#还是幸福的。使用泛型最典型的应用,可能是List<T>了,从List<T>我们可以看到,使用泛型最明显的优点是:...

2019-02-28 17:47:26

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

前言本章节开始讲接口。接口接口的声明很像抽象类,有方法的声明但无方法体。但它比抽象类限制更多。和类比起来,接口的定义有众多限制。接口只能包含声明,而无方法体接口只能包含方法、属性、索引器、事件的声明。即不能有:构造函数、字段、操作符重载成员不允许声明修饰符。接口默认就是public的。定义和实现接口一个比较典型的接口定义,比如:/// <summary>//...

2019-02-22 18:16:34

多种Timer的场景应用

前言今天讲讲各种Timer的使用。三种Timer组件.Net框架提供了三种常规Timer组件,分别是System.Windows.Forms.Timer、System.Timers.Timer和System.Threading.Timer。实际最常用的也就是前两种,而且应用场景比较明确。System.Windows.Forms.TimerForms.Timer基于单线程,也就是基于主...

2019-02-15 17:48:21

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

前言本章节继续讲实现继承。实现继承密封类和密封方法密封类和方法的概念很简单,就是为了不允许类和方法被继承和扩展。不允许扩展一般的原因有:如果类或者方法被扩展,可能会导致类库执行错误因为版权原因,不允许第三方随意扩展该类.Net库有很多密封类,使用者不能随意扩展。我猜测这么做可能是因为设计者想保持框架的纯净性和单一性,即不希望使用者随意扩展而导致出现众多“分支框架”,最终的导致...

2019-01-31 17:34:51

基于.Net进行前端开发的技术栈发展路线(三)

前言上一篇《我的技能树二》文章分享了我的技能中的前端技能和Java技能,今天继续跟大家分享的就是后端技能了。我的技能树我当前的技能树:其中,标注为黄色旗帜的是基本掌握,标注为红色旗帜的为使用熟练。未标注的只是了解。数据库数据库数据库是信息化系统编程的基础。因为我一直是做信息化系统的,所以这一块比较熟悉。最初熟悉的数据库是基于PB开发的Sybase,SQL Anywher...

2019-01-29 17:35:12

分享一个效率工具的程序和源代码

前言今天和大家分享一个效率工具,并分享运行程序和完整源代码。这个工具是辅助管理我自己的日常工作而开发的,从06年开始开发第一版,已经持续使用十多年,现在仍然在使用和改进中,这说明这个工具本质上是有效的,所以才能一直坚持使用和优化。在最近,我又用C#和Winform进行了重写。本来我想用WPF或者Electron重写,这样能把界面做的漂亮一点,或者能实现跨平台。但因为工作繁忙,确实难以抽出很多...

2019-01-24 17:30:34

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

前言今天,我们开始进入第四章的解读。本章讲的是继承。要做稍微复杂一些的开发,便不可避免的会使用到继承。本篇文章我们主要解读“实现继承”。另外,从本文开始,我开始使用Markdown格式来书写文章,它可以提供更好的布局风格和代码样式。继承的类型我们可能都知道,C++支持多继承,但Java和C#都不支持多继承。多继承非常繁琐和复杂,但现实世界中却又有很多多继承的情况,很简单的比如我们每个...

2019-01-22 17:32:31

基于.Net进行前端开发的技术栈发展路线(二)

前言 上一篇《我的技能树》文章分享了我的技能成长过程,还未完成,今天继续跟大家分享。 01我的技能树 我的当前的技能树:其中,标注为黄色旗帜的是基本掌握,标注为红色旗帜的为使用熟练。未标注的只是了解。上篇分享完了C#部分,下面就根据我的学习历程的先后继续讲。 02前端开发 在上家公司上班期间,因为公司产品选型基于Winform+Dev...

2019-01-14 17:33:22

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

前言 本篇我们继续讲解本章其余的部分:构造函数、只读字段、匿名类型、结构详解、部分类、静态类、Object类、扩展方法,等。 01类 构造函数构造函数是一种特殊的方法:与类同名 没有返回值,甚至不能写void(但可以写修饰符public,private,protected) 未指定构造函数时,编译器会自动创建默认构造函数;一旦手工创建了构造函数,编译器就不会...

2019-01-11 17:51:00

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

前言 新年好,本篇开始进入第三章,《对象和类型》,深刻理解C#的对象,对于使用好.Net类库非常重要。 01类和结构 从使用角度看,结构和类的区别很小,比如,将结构定义转换为类,只需要将关键字struct改为class即可。创建结构的时候,也同样可以用关键字new。它们的本质区别是,结构是值类型,存储在栈上,而类存储在堆上。但我还没碰到什么情况下需要使用结构。因为一...

2019-01-10 17:31:38

基于.Net进行前端开发的技术栈发展路线(一)

前言 今天想讲讲的是我的技术树。我最初是做CS开发的,第一阶段的技术经历是以Powerbuilder来做CS开发,第二阶段开始基于C#做winform开发,眼看前端开发越来越流行,需要更广泛的技术栈势在必行。因此以.Net为基础,我开始拓展自己的技术栈。从14年到18年,跨越了很多界限,到现在为止,应该说.Net,Java,Android,基于nodejs的web开发都积累了一些经验,可以...

2019-01-07 12:16:44

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

前言 本篇讲述Main方法,控制台,注释,预处理指令,编程规范等。这些概念比较琐碎,为避免长篇大论,主要以列举要点的方式来说明。 01Main方法 Main方法并不是所有应用类型的入口方法,它只是控制台程序、Winform程序的入口方法。 创建项目时自动生成的Main方法,其修饰符是未指定的(未指定时默认为private),这说明入口方法并不要求public修饰符。...

2019-01-04 09:59:51

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

前言 本篇讲述枚举和名称空间。 01枚举 首先需要明确枚举的概念:枚举是用户定义的整数类型。使用枚举的目标是,使用一组容易记忆的名称,来使得代码更容易编写和维护。我们对比枚举的定义和类的定义,会发现它们有像的地方,有不像的地方,这不同之处体现了枚举的特性。我们按下图举例:C#中,一般习惯于一个文件定义一个类。而一个项目中可能有大量枚举,一般建议将多个枚举定义...

2019-01-03 09:53:32

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

前言 控制流是语言中最基础的部分,我们不谈具体的细节,只讲讲一些关键和有趣的点。 01流控制 条件语句:if, else if, elseif语句的使用非常值得细讲,如何是好的使用习惯。有一点非常重要,就是尽可能的避免太多层次的嵌套,这将带来可读性灾难。我自己的原则是,if嵌套一般不超过2层,最多不超过3层。可读性是什么?是指:不只是你自己写的代码你自己能读懂,更重...

2018-12-28 17:30:42

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

前言 接下来讲讲预定义数据类型。关于数据类型,其实是非常值得透彻研究的。 01预定义数据类型 值类型和引用类型C#将把数据类型分为两种,值类型和引用类型,值类型存储在堆栈上,引用类型存储在托管堆上。因此,对于值类型,如果:Int a = 1;Int b = a;那么内存中就有两份的值1。而对应引用类型,如果:User userA = new Us...

2018-12-27 10:36:05

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

前言 讲到核心C#的语法,其实很难讲,因为大部分是基础知识。如果只讲入门的基础知识,那细节又多,意义也不大。我们就不讲一般性的内容,而是找一些有趣的点,展开讲讲。 01Hello World Hello World一般开始编程的开头,都是写一个Hello World程序,这本书也是不能免俗。我们发现,Hello World基本都是用控制台(Console)程序写的。...

2018-12-25 13:16:46

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

01程序集 程序集是包含编译好的、基于.Net Framework的代码逻辑单元。一般来说,在Visual Studio中的一个项目即一个程序集,而一个项目中包含多种不同的代码文件。程序集分为可执行程序集和库程序集,比如一个Winform项目就编译为可执行程序集,而Winform项目所包含的其他库项目则编译为库程序集。可执行程序集包含主程序入口点,而库程序集不包含。 程序集的特...

2018-12-20 06:40:17

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

01中间语言(IL).Net中间语言(IL)的特性,很大程度上来自于要支持多语言互操作性。要支持多语言互操作性,是因为微软想搞一个大事情,将它的老产品线VB和VC++,VJ++都装入.Net架构中。要支持多语言互操作,就需要实现这些基本功能:1) 继承:一种语言的类能继承另一种语言编写的类。2) 组合:一种语言的类可以包含另外一种语言的类的实例。3) 调用:一个对象能够调用其他...

2018-12-18 20:48:01

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 黄花
    黄花
    子板块内专家分月排名榜第二
  • 蓝花
    蓝花
    子板块内专家分月排名榜第三