C#中一些易混淆概念总结
摘要:C#中一些易混淆概念这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念。现在给大家分享出来我的笔记:一,.NET平台的重要组成部分都是有哪些1)FCL (所谓的.NET框架类库)这些类是微软事先定义好的。例如当我们新创建一个windows窗体应用程序是,VS会帮我们自动生成下面的代码:using System;using System.Collections.Generic;using System.Text;这些就是微软事先为程序员定义好的类库。程序员可以直接使用的。2)CLR (所谓的公共语言运行时)创建部署.NET程序的必备环境使用C#,F#,VB等语言都可以来创
阅读全文
C#4.0泛型的协变,逆变深入剖析
摘要:C#4.0泛型的协变,逆变深入剖析 C#4.0中有一个新特性:协变与逆变。可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的。协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变。什么?泛型的参数还能声明?对,如果有了参数的声明,则该泛型接口或者委托称为“变体”。List 一群汽车 = new List();List 一群车子 = 一群汽车;显然,上面那段代码是会报错的,虽然汽车继承于车子,可以隐士转换为车子,但是List并不继承于List,所以上面的转换,是行不通的。IEnumerable 一群汽车 = new List();IEnumera
阅读全文
关于异步的初步认识
摘要:关于异步的初步认识 在当初试用多线程的时候发现多线程能减轻或消除大量繁杂操作或过长等待时间造成的停滞感(就是线程阻塞)。后来发现使用异步操作也能达到相同的效果。但是两者之间是有区别的,之前在知识库里看了一些文章,我也记录了一下(有人云亦云的感觉),顺便也摆出一些个人观点。 多线程和异步虽然都可以减轻或消除线程阻塞而造成的停滞感,但是两者的本质上是有区别的 多线程是软件级别上的机制,在微观上它是分配CPU的时间片给某个进程中的各条线程,获得时间片的线程就可以处理它的任务,也就是执行代码。在其中负责调度CPU资源的就是操作系统,所以多线程是否能实现取决于操作系统,现今绝大部分操作系统都是多线程..
阅读全文
Windows 8.1 新增控件之 AppBar
摘要:Windows 8.1 与Windows 8 相比已经有了很多改进,从ITPro 角度这篇文章《What's New in Windows 8.1》已经表述的很详细。对开发者来说,最明显的变化就是开始菜单的磁贴尺寸,有大、中、小号之分。搜索功能也集成了Bing,使其更加强大。同时,Windows 8.1 也新增了一些控件(如下),本篇将为大家介绍AppBar 控件的一些使用方法。• AppBar• CommandBar• DatePicker• Flyout• Hub• Hyperlink• MenuFlyout• SettingsFlyout• TimePickerAppBar 顾名
阅读全文
几种分页的实现(3)
摘要:MVC学习(四)几种分页的实现(3) 在这篇MVC学习(四)几种分页的实现(2)博文中,根据URL中传入的两个参数(页码数,首页、上一页、下一页、末页的标记符)来获得对应的分页数据,只是传入的参数太多,调用起来不太方便(标记符不能够写错,需要添加新的路由),因此,如果URL只传入页码数就太好,顺着这个思路,有了第三种分页方式。实现分页形式如下图所示。 下面说说我的思路吧。 为了在试图文件中呈现 ,我们需要写上代码@Html.TextBox(Asp.net MVC 3语法),为了呈现Lable,需要写@Html.Label,这里的@Html,有一个管理它的类 HtmlHelper。为了使用...
阅读全文
C# 词法分析器
摘要:当前标签: 编译原理C# 词法分析器(七)总结CYJB 2014-01-09 12:46 阅读:582 评论:1C# 词法分析器(六)构造词法分析器CYJB 2013-05-07 01:01 阅读:1566 评论:2C# 词法分析器(五)转换 DFACYJB 2013-05-02 23:50 阅读:1252 评论:3C# 词法分析器(四)构造 NFACYJB 2013-04-16 15:32 阅读:1497 评论:2C# 词法分析器(二)输入缓冲和代码定位CYJB 2013-03-28 23:19 阅读:1458 评论:0C# 词法分析器(一)词法分析介绍 update 2014.1.8C#
阅读全文
Csharp Syntactic sugar
摘要:C#语法糖(Csharp Syntactic sugar)大汇总首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。这让java开发人员羡慕不已,呵呵。1. 经过简化的Property早些时候我们这样声明Property1234567891011privatestring_myName;publicstringMyName{get{ return_myName; }set{ _myName = value; }}千篇一律的这样声明,没有多大意义,于是C#的设计人员将这个千篇一律的工作交给了编
阅读全文
EntityFramework中支持BulkInsert扩展
摘要:EntityFramework中支持BulkInsert扩展前言很显然,你应该不至于使用 EntityFramework 直接插入 10W 数据到数据库中,那可能得用上个几分钟。EntityFramework 最被人诟病的地方就是它的性能,处理大量数据时的效率。此种条件下,通常会转回使用 ADO.NET 来完成任务。但是,如果已经在项目中使用了EntityFramework,如果碰到需要直接向数据库中插入 10W 的数据的需求,引入 ADO.NET 和 SqlBulkCopy 的组合将打破EntityFramework 作为 ORM 所带来的优势,我们不得不再次去编写那些 SQL 语句,关注表
阅读全文
值类型和引用类型、可空类型、堆和栈、装箱和拆箱
摘要:C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)前言 之前对几个没什么理解,只是简单的用过可空类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处。 本文的重点就是:值类型直接存储其值,引用类型存储对值的引用,值类型存在堆栈上,引用类型存储在托管堆上,值类型转为引用类型叫做装箱,引用类型转为值类型叫拆箱。 这一句话概括起来很简单,可是真正的理解起来却没那么简单,对于我来说吧。值类型和引用类型C#值类型数据直接在他自身分配到的内存中存储数据,而C#引用类型只是包含指向存储数据位置的指针。C#值类型,我们可以把他...
阅读全文
C#通过模板导出Word(文字,表格,图片)
摘要:C#通过模板导出Word(文字,表格,图片) C#导出Word,Excel的方法有很多,这次因为公司的业务需求,需要导出内容丰富(文字,表格,图片)的报告,以前的方法不好使,所以寻找新的导出方法,在网上找到了通过模板文件导出Word的方法,记录一下过程.一:模板的创建 通过模板导出,肯定需要先创建模板,然后顾名思义就是将模板中提前设置好的占位符,通过程序替换为想输出的内容即可; 新建word文件(必须为docx或者dotx文件),放在程序根目录下,在需要位置 插入-文档部件-域, 域名:MacroButton 宏名:DoFieldClick 显示文字:...
阅读全文
DesignMode的状态处理
摘要:自定义控件开发的调试及DesignMode的状态处理在开发Winform程序的时候,我们往往需要根据需要做一些自定义的控件模块,这样可以给系统模块重复利用,或者实现更好的效果等功能。但在使用的时候,我们又往往设计时刻发现一些莫名其妙的错误,那么我们该如何进行控件的设计时刻的开发调试呢,如何解决碰到设计时刻出现的错误呢?本文主要介绍我自己在这方面积累的一些经验和处理方法,期望对大家有帮助。1、自定义控件的设计错误产生例如我的通用附件模块里面,有一个自定义控件,需要提供给外部使用的,如下所示。这里外部使用的模块,是工作流里面的一个模块,也是一个自定义控件,我想把它作为一个流程信息的展示控件。因此就
阅读全文
并发、并行、同步、异步、阻塞、非阻塞
摘要:并发、并行、同步、异步、阻塞、非阻塞最近在写爬虫 ,对于这几个概念比较模糊,所以特意学习了一下。进程(process):进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程(thread):线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。微线程:又叫协程。 taskle
阅读全文
代码细节重构:请对我的代码指手划脚(四)
摘要:代码细节重构:请对我的代码指手划脚(四) 这是上周在代码审阅会议上讨论到的一段代码,这段代码的作用是根据指定记录数量和页面大小来计算最大分页数量的。目标代码 1 /// 2 /// 根据指定记录数量和页面大小返回分页页数。 3 /// 4 /// 记录总数。 5 /// 页面大小。 6 /// 返回分页页数。 7 public static long ComputePages(int totalRecords, int pageSize) 8 { 9 var total = Convert.ToDouble(totalRecords);10 var size = Conve...
阅读全文
Remote验证及其改进(附源码)
摘要:Remote验证及其改进(附源码)表单中的输入项,有些是固定的,不变的验证规则,比如字符长度,必填等。但有些是动态的,比如注册用户名是否存在这样的检查,这个需要访问服务器后台才能解决。这篇文章将会介绍MVC中如何使用【RemoteAttribute】来解决这类验证需求,同时会分析【RemoteAttribute】的不足,以及改进的方法.本文相关的源代码在这里MVC-Remote-Validation.zip一, RemoteAttribute验证使用如果需要用户把整个表单填完后,提交到后台,然后才告诉用户说,“你注册的用户已经被占用了,请换一个用户名”,估计很多用户都可能要飚脏话了. MVC中
阅读全文
C#在泛型类中,通过表达式树构造lambda表达式
摘要:C#在泛型类中,通过表达式树构造lambda表达式场景最近对爬虫的数据库架构做调整,需要将数据迁移到MongoDB上去,需要重新实现一个针对MongoDB的Dao泛型类,好吧,动手开工,当实现删除操作的时候问题来了。我们的删除操作定义如下:void Delete(TEntity entity)。TEntity是我们的泛型类。而MongoDB官方驱动自带的删除操作是这样的:123// 假设数据模型为已定义的Articlevar query = Query.EQ(t => t.Id, id);coll.Remove(query);Dao操作的接口是不能修改的,这就要求我们必须实现以下操作:获
阅读全文
C# 脚本代码自动登录淘宝获取用户信息
摘要:C# 脚本代码自动登录淘宝获取用户信息最近遇到的一个需求是如何让程序自动登录淘宝, 获取用户名称等信息. 其实这个利用SS (SpiderStudio的简称) 实现起来非常简单. 十数行代码就可以做到非常完善:1. 运行SS (下载地址), 编写脚本打开淘宝登陆页面:Default.Navigate("https://login.taobao.com/member/login.jhtml");Default.Ready();2. 找到用户名, 密码的输入框, 输入信息, 点击登录按钮:var user = Default.SelectSingleNode("#TP
阅读全文
C#无需IIS构建XmlRpc服务器
摘要:C#无需IIS构建XmlRpc服务器准备我们使用CookComputing.XmlRpcServerV2 3.0.0来构建XmlRpc服务器。新建一个控制台项目,在项目中添加对CookComputing.XmlRpcServerV2 3.0.0的引用,可以使用nuget来安装。12PM> Install-Package xmlrpcnetPM> Install-Package xmlrpcnet-server编写服务我这里写了个非常简单的服务,代码如下:12345678public class SimpleService : XmlRpcListenerService{ [XmlR
阅读全文
创建FTP的Site并用C#进行文件的上传下载
摘要:创建FTP的Site并用C#进行文件的上传下载文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机。这些文件存储在运行 FTP 服务器软件的服务器计算机上。然后,远程计算机可以使用 FTP 建立连接,并从服务器读取文件或将文件复制到服务器。FTP 服务器与 HTTP 服务器(即 Web 服务器)的相似之处在于可以使用 Internet 协议与之通信。但是,FTP 服务器不运行网页;它只是向/从远程计算机发送/接收文件。可以将 Internet 信息服务 (IIS) 配置为作为 FTP 服务器来运行。这样,其他计算机便可以连接到服务器并将文件
阅读全文
Enumerable和yield
摘要:说说IEnumerable和yieldIEnumerable数据类型是我比较喜欢的数据类型,特别是其强类型IEnumerable更获得Linq的支持使得代码看起来更加优雅、整洁。编写返回值为IEnumerable(或IEnumerabl,下同)的方法时,会经常用到yield。近几天在开发时碰到一个很头疼的问题,终于在昨天解决。现将问题即解决过程记录如下:一、问题的出现:编写返回值为IEnumerable的方法时,可以用两种方式返回值:1、构造一个实现IEnumerable接口的对象,并返回。2、在方法体内使用yield return逐个返回可能的值,如果中途遇到不需要再返回值的情形,可以使用y
阅读全文
Word文档合并
摘要:Word文档合并的一种实现今天遇到一个问题,就是需要把多个Word文档的内容追加到一个目标Word文档的后面,如果我有目标文档a.doc以及其他很多个文档b.doc,c.doc…等等数量很多。这个问题,如果是在服务端的话,直接使用OpenXML技术,读写文档就可以实现,这样性能较稳定,但是需要对OpenXML有一定的了解。如果在客户端机器上,可以使用Word PIA实现。由于本人对于Word PIA较熟悉,所以采用了该方法。但是在实现的过程中,也是有很多种思路的。将b.doc打开,将其中的内容选中,复制到剪贴板,然后打开目标文件a.doc,通过代码将光标移到文档末尾,粘贴。粘贴一次保存一下文件
阅读全文