自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

转载 C# XML 文档注释文件格式

在编写 C# 代码时,只要在注释按照格式加入 XML 文档注释,例如:/// <summary>/// 这里是类的注释。/// </summary>public class MyClass { }就可以通过设置项目的"属性->生成->输出->XML 文档文件",来为当前项目生成包含所有文档注释的 XML 文件。一般...

2015-03-14 22:38:00 246

转载 C# 中的可变参数方法(VarArgs)

首先需要明确一点:这里提到的可变参数方法,指的是具有CallingConventions.VarArgs调用约定的方法,而不是包含params参数的方法。可以通过MethodBase.CallingConvention 属性来获取某个方法的调用约定。举个常见的例子来说,C 语言的printf方法大多数人应该都知道,它的作用是向标准输出流(stdout)写入格式化字符串,p...

2015-02-12 02:11:00 592

转载 使用 IL 实现类型转换

在之前的文章中,我大致介绍过一些类型间的隐式和显式类型转换规则。但当时并未很仔细的研究过《CSharp Language Specification》,因此实现并不完整。而且只部分解决了类型间能否进行类型转换,仍未解决到底该如何进行类型转换,尤其是在定义泛型类型时,我们明明知道泛型类型的参数是什么类型,但就是不能直接进行类型转换:if (typeof(T) == typeof(i...

2015-02-03 02:56:00 233

转载 [译]类型设计准则

本文由CYJB译自Type Design Guidelines(.NET Framework 4.5)。对 CLR 来说,只存在两种类型——引用类型和值类型。但是为了讨论框架设计,我们将类型细分为更多的逻辑组,每组有其特定的设计准则。类是通用的引用类型,框架中的大部分类型都是类。类因其支持面向对象的大部分特性和普遍适应性而大受欢迎。基类和抽象类是与扩展性相关的特殊逻辑组。...

2015-01-12 10:16:00 135

转载 C# 词法分析器(七)总结

系列导航(一)词法分析介绍(二)输入缓冲和代码定位(三)正则表达式(四)构造 NFA(五)转换 DFA(六)构造词法分析器(七)总结在之前的六篇文章中,我比较详细的介绍了与词法分析器相关的算法。它们都比较关注于实现的细节,感觉上可能比较凌乱,本篇就从整体上介绍一下如何定义词法分析器,以及如何实现自己的词法分析器。第二节完整的介绍了如何定义词法分...

2014-01-09 12:46:00 158

转载 C# 方法调用的切换器 Update 2015.02.02

在编写应用程序时,我们经常要处理这样的一组对象,它们的类型都派生自同一个基类,但又需要为每个不同的子类型应用不同的处理方法。通常的做法,最简单的就是用很多 if-else 去判断各自的类型,如下面的代码所示(这里用 .Net 的类型系统作为例子,MethodInfo、PropertyInfo、FieldInfo 和 Type 都是 MemberInfo 的子类):Member...

2013-10-11 12:27:00 82

转载 在 WinForm 中使用 Direct2D

在 C# 的 WinForm 应用中,界面的绘制使用的是 GDI+。不过在一些特别的应用中,可能需要用硬件加速来提高绘制的效率。下面就来介绍两种在 WinForm 应用中嵌入 Direct2D 的方法。这里所谓的“嵌入”,指的是只有窗口的某一部分应用 Direct2D 绘制(用一些控件承载),而不是整个窗口都使用 Direct2D 绘制。这是一种混合方案,需要用硬件加速的部分由自己来...

2013-10-03 16:07:00 563

转载 拼图游戏 v1.1

我一直对拼图游戏比较有兴趣,市面上卖的所谓“1000块拼图”也玩过不少,不过玩那个太占地方,后来也不再买了,同时也就萌生了在电脑上玩拼图的想法。现在虽然有很多拼图游戏,但能大多数只能支持几十或几百块拼图,很少能支持上千块拼图的游戏。后来,我就利用 Direct2D 自己实现了一个拼图游戏,可以流畅的支持最高 1200 块的拼图(更高其实也可以支持,但是感觉已经足够了),拼图碎片之...

2013-09-21 00:03:00 223

转载 并查集

并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。使用并查集时,首先会存在一组不相交的动态集合 $S = \left\{ {{S_1},{S_2}, \cdots ,{S_k}} \...

2013-09-12 16:38:00 174

转载 顺序表与链表

顺序表与链表是非常基本的数据结构,它们可以被统称为线性表。线性表(Linear List)是由 n(n≥0)个数据元素(结点)a[0],a[1],a[2]…,a[n-1] 组成的有限序列。顺序表和链表,是线性表的不同存储结构。它们各自有不同的特点和适用范围。针对它们各自的缺点,也有很多改进的措施。一、顺序表顺序表一般表现为数组,使用一组地址连续的存储单元依次存储数据元素,...

2013-09-11 01:29:00 280

转载 计算1至n中数字X出现的次数

描述计算 1 至 n 中数字 X 出现的次数,其中 $n \ge 1,X \in [0,9]$。解题思路这是一道比较简单的题目,举个例子先:假设 $n=11, X=1$,那么就是求 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 这 11 个数字中 1 出现的次数,很容易能看出来结果为 4,在 1 和 10 中各出现了一次,在 11 中出现了两次。最简...

2013-09-09 00:05:00 130

转载 C# 使用 Direct2D 实现斜角效果

Direct2D 是微软新的二维图形 API,可为二维几何图形、位图和文本提供高性能和高质量的呈现。Direct2D 支持硬件加速,无论是绘制速度还是绘制质量,Direct2D 都要比 GDI 和 GDI+ 好很多,不过系统要求 Windows 7 或 Windows Vista SP2 以上。关于 Direct2D 的一些介绍可以参见微软的帮助《关于 Direct2D》。Dir...

2013-07-01 21:57:00 286

转载 WPF TreeView Win8 样式

WPF 的 TreeView 控件自带的样式如图 1 的左边所示,节点前的箭头还不错,但是选中效果实在是不给力,如果想更加华丽的话,那么很有必要把 TreeView 的样式好好自定义一番。我最后得到的结果如图 1 的右边所示,是一个 Win8 风格的 TreeView。图 1 TreeView 样式对比在 WPF 中,自定义控件的外观是一件非常简单的事情,但对于 TreeVi...

2013-06-04 19:40:00 333

转载 C# 词法分析器(六)构造词法分析器

系列导航(一)词法分析介绍(二)输入缓冲和代码定位(三)正则表达式(四)构造 NFA(五)转换 DFA(六)构造词法分析器(七)总结现在最核心的 DFA 已经成功构造出来了,最后一步就是根据 DFA 得到完整的词法分析器。由于目前还不能像 Flex 那样支持词法定义文件,所以仍然需要在程序中定义规则,而且也不能非常灵活的自定义词法分析器,不过基...

2013-05-07 01:01:00 211

转载 C# 词法分析器(五)转换 DFA

系列导航(一)词法分析介绍(二)输入缓冲和代码定位(三)正则表达式(四)构造 NFA(五)转换 DFA(六)构造词法分析器(七)总结在上一篇文章中,已经得到了与正则表达式等价的 NFA,本篇文章会说明如何从 NFA 转换为 DFA,以及对 DFA 和字符类进行化简。一、DFA 的表示DFA 的表示与 NFA 比较类似,不过要简单的多,只需...

2013-05-02 23:50:00 158

转载 C# 词法分析器(四)构造 NFA

系列导航(一)词法分析介绍(二)输入缓冲和代码定位(三)正则表达式(四)构造 NFA(五)转换 DFA(六)构造词法分析器(七)总结有了上一节中得到的正则表达式,那么就可以用来构造 NFA 了。NFA 可以很容易的从正则表达式转换而来,也有助于理解正则表达式表示的模式。一、NFA 的表示方法在这里,一个 NFA 至少具有两个状态:首状态和尾...

2013-04-16 15:32:00 130

转载 C# 位压缩列表

.Net 中自带了一个位压缩数组 BitArray,它的功能也跟数组一样,只能对每一位进行操作,而不能添加或删除位。这里介绍的 BitList 类,就是自己写的能够添加、删除位的位压缩列表。一、基本操作位压缩列表,就是用 uint[] 来存储 bool 数据,一个 bool 数据存储到 uint 的一个位中,因此占用的空间只有 bool[] 的八分之一(一个 bool 占 1 字...

2013-04-14 11:08:00 93

转载 编程之美 2013 全国挑战赛 初赛第一场 题目二 相似字符串

题目二 相似字符串时间限制: 4000ms 内存限制: 256MB描述对于两个长度相等的字符串,我们定义其距离为对应位置不同的字符数量,同时我们认为距离越近的字符串越相似。例如,“0123”和“0000”的距离为 3,“0123”和“0213”的距离则为 2,所以与“0000”相比,“0213”和“0123”最相似。现在给定两个字符串 S1 和 S2,其中 S2 的长度不...

2013-04-13 18:06:00 91

转载 编程之美 2013 全国挑战赛 资格赛 题目三 树上的三角形

题目三 树上的三角形时间限制: 2000ms 内存限制: 256MB描述有一棵树,树上有只毛毛虫。它在这棵树上生活了很久,对它的构造了如指掌。所以它在树上从来都是走最短路,不会绕路。它还还特别喜欢三角形,所以当它在树上爬来爬去的时候总会在想,如果把刚才爬过的那几根树枝/树干锯下来,能不能从中选三根出来拼成一个三角形呢?输入输入数据的第一行包含一个整数 T,表示数据组数...

2013-04-09 00:27:00 137

转载 编程之美 2013 全国挑战赛 资格赛 题目二 长方形

题目二 长方形时间限制: 1000ms 内存限制: 256MB描述在 N × M 的网格上,放 K 枚石子,每个石子都只能放在网格的交叉点上。问在最优的摆放方式下,最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子。输入输入文件包含多组测试数据。第一行,给出一个整数T,为数据组数。接下来依次给出每组测试数据。每组数据为三个用空格隔开的整数 ...

2013-04-09 00:20:00 91

转载 编程之美 2013 全国挑战赛 资格赛 题目一 传话游戏

题目一 传话游戏时间限制: 1000ms 内存限制: 256MB描述Alice和Bob还有其他几位好朋友在一起玩传话游戏。这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位。然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位……以此类推,直到倒数第二位告诉Bob。两位游戏者在传话中,不能让其...

2013-04-09 00:16:00 98

转载 基于树状位压缩数组的字符集合

.Net 中内置的集合(HashSet<T>)采用的是哈希表数据结构,无论是插入还是删除的效率都非常高,但是作为通用的数据结构,难以对集合操作进行有效的优化。如果集合中存储的数据特定为字符的话,那么可以利用位压缩数组,即获得比较高的插入和删除效率,又能够有很高的集合操作效率。一、基于树状位压缩数组存储字符集合位压缩数组,就是 C# 中的 BitArray,它将 32 ...

2013-04-04 22:19:00 72

转载 C# 词法分析器(三)正则表达式

系列导航(一)词法分析介绍(二)输入缓冲和代码定位(三)正则表达式(四)构造 NFA(五)转换 DFA(六)构造词法分析器(七)总结正则表达式是一种描述词素的重要表示方法。虽然正则表达式并不能表达出所有可能的模式(例如“由等数量的 a 和 b 组成的字符串”),但是它可以非常高效的描述处理词法单元时要用到的模式类型。一、正则表达式的定义正则...

2013-04-02 16:30:00 210

转载 C# 词法分析器(二)输入缓冲和代码定位

系列导航(一)词法分析介绍(二)输入缓冲和代码定位(三)正则表达式(四)构造 NFA(五)转换 DFA(六)构造词法分析器(七)总结一、输入缓冲在介绍如何进行词法分析之前,先来说说一个不怎么被提及的问题——怎么从源文件中读取字符流。为什么这个问题这么重要呢?是因为在词法分析中,对字符流是有要求的,它必须能够支持回退操作(就是将多个字符放回到流中...

2013-03-28 23:19:00 124

转载 C# 中容易忽视的 Encoding.GetByteCount 内存问题

如果想在 C# 中判断字符是全角还是半角的,通常的办法是使用 Encoding.Default.GetByteCount 方法,使用它的时候却有很容易忽视的内存问题,具体表现为多次(数万次,不同电脑可能不同)调用 GetByteCount 方法时,会导致内存垃圾回收,那么意味着在这个过程中产生了大量的临时对象。下面这段测试代码就是对总长为 6 万的 char 数组计算它的字节数,循环...

2013-03-26 21:24:00 272

转载 C# 词法分析器(一)词法分析介绍 update 2014.1.8

系列导航(一)词法分析介绍(二)输入缓冲和代码定位(三)正则表达式(四)构造 NFA(五)转换 DFA(六)构造词法分析器(七)总结虽然文章的标题是词法分析,但首先还是要从编译原理说开来。编译原理应该很多人都听说过,虽然不一定会有多么了解。简单的说,编译原理就是研究如何进行编译——也就如何从代码(*.cs 文件)转换为计算机可以执行的程序(*....

2013-03-25 19:54:00 199

转载 C# 反射的委托创建器

.Net 的反射是个很好很强大的东西,不过它的效率却实在是不给力。已经有很多人针对这个问题讨论过了,包括各种各样的 DynamicMethod 和各种各样的效率测试,不过总的来说解决方案就是利用 Expression Tree、Delegate.CreateDelegate 或者 Emit 构造出反射操作对应的委托,从而实现加速反射的目的。虽然本篇文章同样是讨论利用委托来加速反射调用...

2013-03-21 19:57:00 80

转载 C# 泛型方法的类型推断

这里所谓的“泛型方法的类型推断”,指的是根据已有的方法实参的类型,推断出泛型方法的类型实参。例如一个泛型方法void Method<T>(T[] args),如果我给出方法实参类型是int[],那么希望能够推断出T = int。这个问题是我在测试上一篇随笔《C# 使用 Binder 类自定义反射》中的类时发现的,当时为了能够让 PowerBinder 支持泛型方法绑...

2013-03-19 18:19:00 334

转载 C# 使用 Binder 类自定义反射 update 2013.1.26

在利用 Type 类进行反射时,经常用到 GetMethod 和 GetProperty 反射方法与属性,或者使用 InvokeMember 直接调用类型成员。这些方法都具有一个 System.Reflection.Binder 类型的 binder 参数,而这个参数一般都是设置为 null 的,很少使用。事实上,这个 binder 参数是很强大的,它可以几乎完全控制反射的工作方式(...

2013-01-22 20:32:00 174

转载 C# 获取与解析枚举类型的 DescriptionAttribute

System.ComponentModel.DescriptionAttribute 这个 Attribute,经常被用来为属性或事件提供说明,这个说明是可以被本地化的。在一些用户界面中,就可以利用这个 Attribute 提供一些额外的信息,就像 Visual Studio 中所做的,如图 1 所示:图 1 可以看到,对 AutoSizeMode 的说明,被显示在了下面的框中。...

2012-12-29 00:46:00 426

转载 C# 判断类型间能否隐式或强制类型转换,以及开放泛型类型转换 update 2015.02.03...

如果要判断某个实例是否与其它类型兼容,C# 已经提供了两个运算符 is 和 as,Type 类也提供了 IsAssignableFrom 方法来对两个类型进行判断。但他们实际上判断的是类型是否在继承层次结构中,而不是类型间是否可以进行转换。例如下面的代码:long a = 0;Console.WriteLine(a is int);Console.WriteLine(ty...

2012-12-01 00:22:00 468

转载 一个改进 LRU 算法的缓冲池 update 2013.7.15

首先,这里的缓冲池指的是 Cache,而不是 Buffer,就是指将代价较大的对象先存储起来,以备以后需要的时候可以直接拿来用,能够节约一些时间或空间。当缓冲池中的对象过多时,就需要删掉一些“不会再用”的对象来节约内存。但是没人能够知道某个对象什么时候会再用,因此这就涉及到缓存替换算法了,好的缓存替换算法可以有更大的概率删掉“不会再用”的对象,能够保留“很可能再用”的对象。现在发...

2012-11-16 22:38:00 108

转载 Unicode 字符串逆序

字符串的逆序是个非常简单的算法,可以直接使用一层循环搞定,或者下面一句代码。str = new string(str.Reverse().ToArray());但是对于 Unicode 字符串来说,这种方法并不完全正确,因为 Unicode 里有复合字符和代理项对这两种特殊的东西。复合字符是后跟一个或多个组合字符的基本字符,也就是说,有些符号并不是由单一的一个 c...

2012-11-11 15:35:00 476

转载 新博客第一篇,字符串 Unicode 转义

在博客园开了博客,也算是把自己的东西分享一下,希望自己能坚持下去吧。第一篇其实是个小东西,就是字符串的 Unicode 转义。有时候在处理一些网络信息的时候,难免要对中文进行 Unicode 转义,就是变成 \u4E2D\u6587 的样子,以便于进行网络传输。为了方便编码和解码,就写了两个函数来做这件事。首先是十六进制字符的判断,我把它放到了单独的类中以方便重用。实现的功能很简...

2012-11-09 22:06:00 161

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除