摘要: 在我先前一篇博文中已经明确说明事件的本质(返回值)其实是一个委托,既然如此,它必定包含全部委托的特性和意义。我们可以通过简单地定义一个委托,然后把它声明成一个public event就等于公开了一个事件,可以在其它地方通过引用该对象而被订阅触发。通常而言,一个典型的自定义事件可能如下:[C#]public class MyExample{ public event Action MyEvent; public void RaiseMyEvent() { if(MyEvent!=null) { MyEvent(); }... 阅读全文
posted @ 2012-09-26 14:29 Serviceboy 阅读(619) 评论(0) 推荐(0) 编辑
摘要: 使用数据库的朋友大家想必都知道,如果想要维持“一堆多”数据表数据的一致性,必须做到以下几点:1)插入时,外键必须包含于主表(“1”对多中“1”那个表)关联字段集合中。2)删除时,主表关联字段被删除,其子表关联数据也一律自动被删除。3)更新时,主表关联字段被更新,其子表关联数据也一律自动被更新。其实要做到这三点,最简单的一个做法莫过于:1)打开SQL Management Studio,成功登陆之后打开某个数据库(展开“+”节点),并且找到“Diagram”(关联图),导入所需要的表。2)从主表(“1”)鼠标左键按住不放,拖拽到从表(“多”)的“外键”字段。在弹出的对话框中分别确定设置主表和从表 阅读全文
posted @ 2012-09-11 15:48 Serviceboy 阅读(732) 评论(1) 推荐(1) 编辑
摘要: 不少.NET程序因为动态加载等需要反射技术,所以了解此技术显得非常重要。在此想给大伙儿逐一介绍一下:1)基础知识——程序集与命名空间:.NET中有两个最容易被忽略的东西莫过于“程序集”和“命名空间”。初学者往往容易在此地混淆,因此需要介绍一番:所谓“程序集”(Assembly),可以理解成一个exe或者dll程序的“签名档”——其包含了程序的版本、文件名等一系列信息。我们可以通过右键某个exe或者dll,查看此信息。例如编写了一个控制台的exe程序,右键查看属性截图如下:其中这些属性已经包含到了一个叫做AssemblyInfo.cs文件中(在C#中默认位置在于Properties文件夹下,VB 阅读全文
posted @ 2012-08-25 18:45 Serviceboy 阅读(826) 评论(0) 推荐(0) 编辑
摘要: 我们不仅可以利用C#编写生成exe程序,同时还可以调用外部的exe程序。调用可以直接使用Process类:[C#]Process.Start("notepad");[VB.NET]Process.Start("notepad")当然,值得注意的是“notepad”是Windows系统变量已经定义的一个程序(右键“我的电脑”=>“属性”=>“环境变量”)便可以看到notepad位于%winDir%\system32下,而这个路径被指定到了path中(由于“path”中路径极多,您可以选中path中的文本拷贝到一个文件中便可以窥察到此字符串路径) 阅读全文
posted @ 2012-08-16 17:18 Serviceboy 阅读(2290) 评论(0) 推荐(0) 编辑
摘要: 一般情况下多线程总是无序的,要使其按照一定的顺序执行(比如B线程必须在A线程执行完毕之后才执行)。可以采用调用Thread的Join方式,也可以使用“信号”类的方式完成此任务。常见的信号类有AutoResetEvent和ManualResetEvent。一般情况下,可以给它们的默认构造函数传入false,这就表示当前初始化该信号源准备发送信号,当调用了WaitOne方法的时候把当前的线程阻塞,直到接受到信号为止(发送信号使用Set函数)。下面是一个例子:[C#]public class Example { /// <summary> /// 预备信号,准备发送... 阅读全文
posted @ 2012-08-11 14:34 Serviceboy 阅读(576) 评论(0) 推荐(0) 编辑
摘要: net2.0中增加了XmlDocument类用于创建编辑xml文件。这里做一个归纳总结。1)XmlDocument有两个公开用于加载xml内容的方法:1.1)Load(传入xml文件的绝对或者相对路径),1.2)LoadXml(用于直接加载xml内容的字符串),两者不可混淆。2)XmlDocument中筛选xml节点有两个方法:2.1)SelectSingleNode(根据指定的筛选条件筛选出符合条件的第一个记录)。2.2)SelectNodes(根据指定的筛选条件筛选出符合条件的全部节点)。此二者方法所接受的参数是XPath的筛选字符串,关于XPath可以参考:http://www.w3sc 阅读全文
posted @ 2012-08-10 14:38 Serviceboy 阅读(1414) 评论(0) 推荐(0) 编辑
摘要: .NET中c#或者vb.net之所以那么吸引人,其重要原因之一就是其存在大量的“简化写法”——这些“简化写法”主要通过“语法糖”的形式存在(比如Lambda,匿名方法等……)。今天我们来探讨一下using……这个“语法糖”的本质和用法,以及一些常见的错误。1)using……用法:在C#或者是VB.NET中“using”必须和一个实现了IDisposible接口的实体类混合使用,其语法形式为:[C#]using(类名称 实体名称 = new 类名称()){ //这里使用……}[VB.NET]Using 实体名 As New 类名称'这儿使用这个类实体……End Using通过MSDN的说 阅读全文
posted @ 2012-08-04 19:47 Serviceboy 阅读(1296) 评论(0) 推荐(0) 编辑
摘要: 许多人容易混淆了SelectMany和Select的用法,作为扩展方法它们的区别何在呢?如果我们看这两个扩展函数的定义很容易明白——Select是把要遍历的集合IEnumerable<T>逐一遍历,每次返回一个T,合并之后直接返回一个IEnumerable<T>,而SelectMany则把原有的集合IEnumerable<T>每个元素遍历一遍,每次返回一个IEnumerable<T>,把这些IEnumerable<T>的“T”合并之后整体返回一个IEnumerable<T>。上述红色部分标记了它们最大的差别。因此我们可以说 阅读全文
posted @ 2012-07-26 11:51 Serviceboy 阅读(2984) 评论(2) 推荐(2) 编辑
摘要: 枚举的作用就是用“字面量”的形式(附带智能提示)取代纯粹的数字化。假设某一个程序中有4盏灯,同时该程序带有一个输入源信号来输入究竟是那个灯点亮——显然定义一个枚举远远胜过用数字(1,2,3,4)表示具体某个灯亮好得多。因此枚举和数值往往是密不可分的。通常情况下枚举第一项默认是0,以后每项递增1;但是某些情况下(例如“多态枚举”——指一个枚举值可能包含多种枚举状态)的情况下,你完全为某些枚举指定对应的值,而且必须如此(理由后面说明)。譬如判断任意一个文件在Windows下的状态(假设3种):[C#]public enum FileAttributes{ Normal = 1 Hidden... 阅读全文
posted @ 2012-07-17 14:56 Serviceboy 阅读(1343) 评论(0) 推荐(0) 编辑
摘要: WinForm的一些控件具备自绘功能,这就意味着你可以对这些控件进行自绘,起到意想不到的效果。以下控件就是通过一些简单的控件转变过来的——1、横向选项卡:这个“横向”对话框其实是通过一个TabControl进行“方向旋转”、重绘控件项等操作进行实现的。步骤如下:1.1)Alignment:用于控制选项卡的方向(设置为Left)。1.2)SizeMode:用于调整每个选项卡,默认是Normal(非自绘模式),此处应该设置为Fixed(固定模式),则允许自绘。1.3)设置ItemSize(注意每一个选项卡因为是“横向”的,但是这些单元卡的Width或者是Height确实按照原来“竖向”的选项卡进行 阅读全文
posted @ 2012-07-07 14:08 Serviceboy 阅读(1280) 评论(1) 推荐(1) 编辑