<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[产品技术知与行]]></title><description><![CDATA[讲讲技术，谈谈产品，感悟生活，展望IT技术和未来，做喜欢的事情。]]></description><link>https://blog.youkuaiyun.com/daixf_csdn</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; daixf_csdn]]></copyright><item><title><![CDATA[解读经典《C#高级编程》最全泛型协变逆变解读 页127-131.章4]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/88425503</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/88425503</guid><author>daixf_csdn</author><pubDate>Tue, 12 Mar 2019 17:46:00 +0800</pubDate><description><![CDATA[前言

本篇继续讲解泛型。上一篇讲解了泛型类的定义细节。本篇继续讲解泛型接口。

泛型接口
使用泛型可定义接口，即在接口中定义的方法可以带泛型参数。然后由继承接口的类实现泛型方法。用法和继承泛型类基本没有区别。
不变、协变和逆变
在.Net4.0之前，泛型接口是不变的。.Net4.0通过协变和逆变为泛型接口和泛型委托增加了重要的扩展。

注：本书总体非常好，但在协变和逆变方面，我认为是有缺陷的。我...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》泛型 页122-127.章4]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/88192867</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/88192867</guid><author>daixf_csdn</author><pubDate>Tue, 05 Mar 2019 17:48:26 +0800</pubDate><description><![CDATA[前言

本篇继续讲解泛型。上一篇讲解了泛型类的创建。本篇讲解泛型类创建和使用的细节。

泛型类
上篇举了个我产品中用到的例子，本篇的功能可以对照着此案例进行理解。
/// &amp;lt;summary&amp;gt;
/// 单一事务处理服务，用于单表的数据读写事务
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;typeparam name=&quot;TViewModel&quot;&amp;gt;&amp;lt;/typepara...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》泛型 页114-122.章4]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/88038513</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/88038513</guid><author>daixf_csdn</author><pubDate>Thu, 28 Feb 2019 17:47:26 +0800</pubDate><description><![CDATA[前言

本章节开始讲解泛型。.Net从2.0开始支持泛型，泛型不仅是C#的一部分，也与IL代码紧密集成。所以C#中泛型的实现非常优雅。相对于C#，Java是后期引入的泛型，受限于最初的设计架构，就实现的比较别扭，遭到不少人的吐槽，比如“类型擦除”问题。使用C#还是幸福的。
使用泛型最典型的应用，可能是List&amp;lt;T&amp;gt;了，从List&amp;lt;T&amp;gt;我们可以看到，使用泛型最明显的优点是：
...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》继承 页107-113.章4]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/87883637</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/87883637</guid><author>daixf_csdn</author><pubDate>Fri, 22 Feb 2019 18:16:34 +0800</pubDate><description><![CDATA[前言

本章节开始讲接口。

接口
接口的声明很像抽象类，有方法的声明但无方法体。但它比抽象类限制更多。和类比起来，接口的定义有众多限制。

接口只能包含声明，而无方法体
接口只能包含方法、属性、索引器、事件的声明。即不能有：构造函数、字段、操作符重载
成员不允许声明修饰符。接口默认就是public的。

定义和实现接口
一个比较典型的接口定义，比如：
/// &amp;lt;summary&amp;gt;
//...]]></description><category></category></item><item><title><![CDATA[多种Timer的场景应用]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/87375055</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/87375055</guid><author>daixf_csdn</author><pubDate>Fri, 15 Feb 2019 17:48:21 +0800</pubDate><description><![CDATA[前言

今天讲讲各种Timer的使用。

三种Timer组件
.Net框架提供了三种常规Timer组件，分别是System.Windows.Forms.Timer、System.Timers.Timer和System.Threading.Timer。实际最常用的也就是前两种，而且应用场景比较明确。
System.Windows.Forms.Timer
Forms.Timer基于单线程，也就是基于主...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》第七版 Page100-107.继承.Chapter4]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/86718676</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/86718676</guid><author>daixf_csdn</author><pubDate>Thu, 31 Jan 2019 17:34:51 +0800</pubDate><description><![CDATA[前言

本章节继续讲实现继承。

实现继承
密封类和密封方法
密封类和方法的概念很简单，就是为了不允许类和方法被继承和扩展。不允许扩展一般的原因有：

如果类或者方法被扩展，可能会导致类库执行错误
因为版权原因，不允许第三方随意扩展该类

.Net库有很多密封类，使用者不能随意扩展。我猜测这么做可能是因为设计者想保持框架的纯净性和单一性，即不希望使用者随意扩展而导致出现众多“分支框架”，最终的导致...]]></description><category></category></item><item><title><![CDATA[基于.Net进行前端开发的技术栈发展路线（三）]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/86693146</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/86693146</guid><author>daixf_csdn</author><pubDate>Tue, 29 Jan 2019 17:35:12 +0800</pubDate><description><![CDATA[前言

上一篇《我的技能树二》文章分享了我的技能中的前端技能和Java技能，今天继续跟大家分享的就是后端技能了。

我的技能树

我当前的技能树：

其中，标注为黄色旗帜的是基本掌握，标注为红色旗帜的为使用熟练。未标注的只是了解。

数据库


数据库
数据库是信息化系统编程的基础。因为我一直是做信息化系统的，所以这一块比较熟悉。最初熟悉的数据库是基于PB开发的Sybase，SQL Anywher...]]></description><category></category></item><item><title><![CDATA[分享一个效率工具的程序和源代码]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/86630556</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/86630556</guid><author>daixf_csdn</author><pubDate>Thu, 24 Jan 2019 17:30:34 +0800</pubDate><description><![CDATA[前言

今天和大家分享一个效率工具，并分享运行程序和完整源代码。这个工具是辅助管理我自己的日常工作而开发的，从06年开始开发第一版，已经持续使用十多年，现在仍然在使用和改进中，这说明这个工具本质上是有效的，所以才能一直坚持使用和优化。
在最近，我又用C#和Winform进行了重写。本来我想用WPF或者Electron重写，这样能把界面做的漂亮一点，或者能实现跨平台。但因为工作繁忙，确实难以抽出很多...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》第七版 Page94-100.继承.Chapter4]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/86598419</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/86598419</guid><author>daixf_csdn</author><pubDate>Tue, 22 Jan 2019 17:32:31 +0800</pubDate><description><![CDATA[前言

今天，我们开始进入第四章的解读。本章讲的是继承。要做稍微复杂一些的开发，便不可避免的会使用到继承。本篇文章我们主要解读“实现继承”。
另外，从本文开始，我开始使用Markdown格式来书写文章，它可以提供更好的布局风格和代码样式。

继承的类型

我们可能都知道，C++支持多继承，但Java和C#都不支持多继承。多继承非常繁琐和复杂，但现实世界中却又有很多多继承的情况，很简单的比如我们每个...]]></description><category></category></item><item><title><![CDATA[基于.Net进行前端开发的技术栈发展路线（二）]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/86480950</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/86480950</guid><author>daixf_csdn</author><pubDate>Mon, 14 Jan 2019 17:33:22 +0800</pubDate><description><![CDATA[前言

 

上一篇《我的技能树》文章分享了我的技能成长过程，还未完成，今天继续跟大家分享。

 

01

我的技能树

 

我的当前的技能树：



其中，标注为黄色旗帜的是基本掌握，标注为红色旗帜的为使用熟练。未标注的只是了解。

上篇分享完了C#部分，下面就根据我的学习历程的先后继续讲。

 

02

前端开发

 



在上家公司上班期间，因为公司产品选型基于Winform+Dev...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》第七版 Page79-93.对象和类型.Chapter3]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/86309464</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/86309464</guid><author>daixf_csdn</author><pubDate>Fri, 11 Jan 2019 17:51:00 +0800</pubDate><description><![CDATA[前言

 

本篇我们继续讲解本章其余的部分：构造函数、只读字段、匿名类型、结构详解、部分类、静态类、Object类、扩展方法，等。

 

01

类

 

构造函数

构造函数是一种特殊的方法：

与类同名
	没有返回值，甚至不能写void（但可以写修饰符public，private，protected）
	未指定构造函数时，编译器会自动创建默认构造函数；一旦手工创建了构造函数，编译器就不会...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》第七版 Page68-79.对象和类型.Chapter3]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/86243225</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/86243225</guid><author>daixf_csdn</author><pubDate>Thu, 10 Jan 2019 17:31:38 +0800</pubDate><description><![CDATA[前言

 

新年好，本篇开始进入第三章，《对象和类型》，深刻理解C#的对象，对于使用好.Net类库非常重要。

 

01

类和结构

 

从使用角度看，结构和类的区别很小，比如，将结构定义转换为类，只需要将关键字struct改为class即可。创建结构的时候，也同样可以用关键字new。它们的本质区别是，结构是值类型，存储在栈上，而类存储在堆上。

但我还没碰到什么情况下需要使用结构。因为一...]]></description><category></category></item><item><title><![CDATA[基于.Net进行前端开发的技术栈发展路线（一）]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/85994975</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/85994975</guid><author>daixf_csdn</author><pubDate>Mon, 07 Jan 2019 12:16:44 +0800</pubDate><description><![CDATA[前言

 

今天想讲讲的是我的技术树。我最初是做CS开发的，第一阶段的技术经历是以Powerbuilder来做CS开发，第二阶段开始基于C#做winform开发，眼看前端开发越来越流行，需要更广泛的技术栈势在必行。因此以.Net为基础，我开始拓展自己的技术栈。从14年到18年，跨越了很多界限，到现在为止，应该说.Net，Java，Android，基于nodejs的web开发都积累了一些经验，可以...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》第七版 Page50-68.核心C#.Chapter2]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/85758139</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/85758139</guid><author>daixf_csdn</author><pubDate>Fri, 04 Jan 2019 09:59:51 +0800</pubDate><description><![CDATA[前言

 

本篇讲述Main方法，控制台，注释，预处理指令，编程规范等。这些概念比较琐碎，为避免长篇大论，主要以列举要点的方式来说明。

 

01

Main方法

 

Main方法并不是所有应用类型的入口方法，它只是控制台程序、Winform程序的入口方法。
	创建项目时自动生成的Main方法，其修饰符是未指定的（未指定时默认为private），这说明入口方法并不要求public修饰符。
...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》第七版 Page45-50.核心C#.Chapter2]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/85677580</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/85677580</guid><author>daixf_csdn</author><pubDate>Thu, 03 Jan 2019 09:53:32 +0800</pubDate><description><![CDATA[前言

 

本篇讲述枚举和名称空间。

 

01

枚举

 

首先需要明确枚举的概念：枚举是用户定义的整数类型。使用枚举的目标是，使用一组容易记忆的名称，来使得代码更容易编写和维护。

我们对比枚举的定义和类的定义，会发现它们有像的地方，有不像的地方，这不同之处体现了枚举的特性。我们按下图举例：



C#中，一般习惯于一个文件定义一个类。而一个项目中可能有大量枚举，一般建议将多个枚举定义...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》第七版 Page38-45.核心C#.Chapter2]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/85328855</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/85328855</guid><author>daixf_csdn</author><pubDate>Fri, 28 Dec 2018 17:30:42 +0800</pubDate><description><![CDATA[前言

 

控制流是语言中最基础的部分，我们不谈具体的细节，只讲讲一些关键和有趣的点。

 

01

流控制

 

条件语句:if, else if, else

if语句的使用非常值得细讲，如何是好的使用习惯。有一点非常重要，就是尽可能的避免太多层次的嵌套，这将带来可读性灾难。我自己的原则是，if嵌套一般不超过2层，最多不超过3层。可读性是什么？是指：不只是你自己写的代码你自己能读懂，更重...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》第七版 Page32-38.核心C#.Chapter2]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/85272731</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/85272731</guid><author>daixf_csdn</author><pubDate>Thu, 27 Dec 2018 10:36:05 +0800</pubDate><description><![CDATA[前言

 

接下来讲讲预定义数据类型。关于数据类型，其实是非常值得透彻研究的。

 

01

预定义数据类型

 

值类型和引用类型

C#将把数据类型分为两种，值类型和引用类型，值类型存储在堆栈上，引用类型存储在托管堆上。因此，对于值类型，如果：

Int a = 1;

Int b = a;

那么内存中就有两份的值1。

而对应引用类型，如果：

User userA = new Us...]]></description><category></category></item><item><title><![CDATA[解读经典《C#高级编程》第七版 Page20-32.核心C#.Chapter2]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/85244621</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/85244621</guid><author>daixf_csdn</author><pubDate>Tue, 25 Dec 2018 13:16:46 +0800</pubDate><description><![CDATA[前言

 

讲到核心C#的语法，其实很难讲，因为大部分是基础知识。如果只讲入门的基础知识，那细节又多，意义也不大。我们就不讲一般性的内容，而是找一些有趣的点，展开讲讲。

 

01

Hello World

 

Hello World

一般开始编程的开头，都是写一个Hello World程序，这本书也是不能免俗。我们发现，Hello World基本都是用控制台（Console）程序写的。...]]></description><category></category></item><item><title><![CDATA[解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page13-20]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/85111126</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/85111126</guid><author>daixf_csdn</author><pubDate>Thu, 20 Dec 2018 06:40:17 +0800</pubDate><description><![CDATA[01

程序集

 

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

 

程序集的特...]]></description><category></category></item><item><title><![CDATA[解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page6-13]]></title><link>https://blog.youkuaiyun.com/daixf_csdn/article/details/85078702</link><guid>https://blog.youkuaiyun.com/daixf_csdn/article/details/85078702</guid><author>daixf_csdn</author><pubDate>Tue, 18 Dec 2018 20:48:01 +0800</pubDate><description><![CDATA[01

中间语言（IL）

.Net中间语言（IL）的特性，很大程度上来自于要支持多语言互操作性。要支持多语言互操作性，是因为微软想搞一个大事情，将它的老产品线VB和VC++，VJ++都装入.Net架构中。要支持多语言互操作，就需要实现这些基本功能：

1） 继承：一种语言的类能继承另一种语言编写的类。

2） 组合：一种语言的类可以包含另外一种语言的类的实例。

3） 调用：一个对象能够调用其他...]]></description><category></category></item></channel></rss>