冠冕堂皇

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

随笔分类 -  C#/.NET

摘要:这篇博文我不讲委托和事件的概念,因为大段的文字概念没有任何意义。具体想了解,委托和事件的概念可以MSDN查阅。我这篇文章的主题思路是委托如何一步步进化成事件:何为委托--->委托来实现事件--->用方法对委托的封装--->Event的add,remove方法的引入--->标准事件写法--->反编译探究竟。用几个例子以及Reflector反编译探究委托和事件的关系。不足之处,还望多多指教...何为委托:首先,委托是一种类型,是一种定义了方法签名的类型。委托可以理解为函数指针(安全),并且委托约束了方法的签名(由返回类型和参数组成),所以实例化委托时,可以将其实例与任 阅读全文
posted @ 2013-10-09 17:15 冠冕堂皇 阅读(243) 评论(0) 推荐(0)

摘要:http://msdn.microsoft.com/zh-cn/library/17sde2xt(v=vs.90).aspx事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型 (Delegate),该类型提供函数指针的功能。委托是可保存对方法的引用的类。与其他的类 阅读全文
posted @ 2013-10-09 09:42 冠冕堂皇 阅读(182) 评论(0) 推荐(0)

摘要:前言:本文介绍为什么使用Dns.GetHostAddresses()在不同计算机上执行结果不同的原因;并且给出了筛选IPv4或者ipv6地址的代码。在XPsp3系统和Win7系统分别执行Dns.GetHostAddresses()方法,得到了不同的结果:win7:xp:xp中在cmd输入如下命令:原因可知:xpsp3系统没有安装ipv6协议,下面安装进行测试:安装ipv6协议:再输入ipv6 if >D:\ipv6if.txt输出内容如下:Interface 6: Ethernet: 本地连接 Guid {14F445CB-3489-474B-B644-5F749E251F46} use 阅读全文
posted @ 2013-07-11 17:19 冠冕堂皇 阅读(1275) 评论(0) 推荐(0)

摘要:窗体闪退,在不同机器上运行效果不同:有的闪退;有的正常;有的弹框。从弹框的机器得到信息:EventType clr20r3 P1....P2...PN搜索大概得到如下信息:在某些Windows Server 2003的操作系统上,运行.Net 2.0或者3.5的应用程序时,会发现没有任何反应,到系统的事件查看器里会发现类似EventType clr20r3 P1....P2...PN的错误提示。很可能的原因就是:你的应用程序出现了异常,而.net没有或者无法捕捉该异常,所以导致出现如下情况:1.双击可执行程序,没有反应。2.此时去任务管理器中会看到一个DW20.exe的进程,不久会自动消失3. 阅读全文
posted @ 2013-07-11 10:21 冠冕堂皇 阅读(1011) 评论(0) 推荐(0)

摘要:来自:http://www.cnblogs.com/xiaoyusmile/archive/2011/12/08/2280925.html源码下载在c#中,event与delegate是两个非常重要的概念。因为在Windows应用程序中,对事件的使用非常频繁,而事件的实现依赖于delegate。 下面是对网上一些比较好的关于delegage的资料的整理,以及自己的一些想法。委托概述委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。一旦为委托分配了方法,委托将与该方法具有完全相同的行 阅读全文
posted @ 2013-07-04 09:02 冠冕堂皇 阅读(306) 评论(0) 推荐(0)

摘要:http://www.cnblogs.com/heyuquan/archive/2013/03/22/2976420.html传送门:异步编程系列目录……大部分开发人员,在开发多线程应用程序时,都是使用ThreadPool的QueueUserWorkItem方法来发起一次简单的异步操作。然而,这个技术存在许多限制。最大的问题是没有一个内建的机制让你知道操作在什么时候完成,也没有一个机制在操作完成时获得一个返回值。为了克服这些限制(并解决其他一些问题),Microsoft引入了三种异步编程模式:.NET1.0异步编程模型(APM),基于IAsyncResult接口实现。.NET2.0基于事件的异 阅读全文
posted @ 2013-07-03 15:03 冠冕堂皇 阅读(446) 评论(0) 推荐(0)

摘要:http://www.cnblogs.com/heyuquan/archive/2013/04/26/async-list.html术语:APM异步编程模型,Asynchronous Programming ModelEAP基于事件的异步编程模式,Event-based Asynchronous PatternTAP基于任务的异步编程模式,Task-based Asynchronous PatternTPL任务并行库,Task Parallel Library现在我给这个系列整个目录和做个简单介绍。“概要+目录”整理C#语言是微软于2000年发布,基于.NET Framewrok框架的、面向对 阅读全文
posted @ 2013-07-03 15:01 冠冕堂皇 阅读(348) 评论(0) 推荐(0)

摘要:http://msdn.microsoft.com/zh-cn/library/ms228969(v=vs.90).aspx异步操作通常用于执行完成时间可能较长的任务,如打开大文件、连接远程计算机或查询数据库。异步操作在主应用程序线程以外的线程中执行。应用程序调用方法异步执行某个操作时,应用程序可在异步方法执行其任务时继续执行。.NET Framework 为异步操作提供两种设计模式:使用IAsyncResult对象的异步操作。使用事件的异步操作。IAsyncResult设计模式允许多种编程模型,但更加复杂不易学习,可提供大多数应用程序都不要求的灵活性。可能的话,类库设计者应使用事件驱动模型实 阅读全文
posted @ 2013-07-03 14:58 冠冕堂皇 阅读(590) 评论(0) 推荐(0)

摘要:http://www.cnblogs.com/zhangzheny/archive/2007/12/24/1012790.html大家都容易把这两者搞混,我也一样,在听李建忠老师的设计模式时,他也老把抽象类说成接口,弄的我就更糊涂了,所以找了些网上的资料. 一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。 二、接口: 接口是引用类型的,类似于类 阅读全文
posted @ 2013-06-07 17:47 冠冕堂皇 阅读(139) 评论(0) 推荐(0)

摘要:在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别。二者都牵涉到在派生类中与override的配合使用。一、Virtual方法(虚方法)virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。二、Abstract方法(抽象方法)abstract关键字只 阅读全文
posted @ 2013-06-07 17:45 冠冕堂皇 阅读(900) 评论(0) 推荐(0)

摘要:from:http://www.cnblogs.com/chenxizhang/archive/2009/06/07/1498312.html这一篇要讲一个非常重要的话题:char类型与string类型的区别。从字面上说,他们是有区别的1. char是字符类型2. string是字符串类型虽然一字之差,但其本质是很大的。1. char属于基础类型(C++),在C#中它属于值类型(Value Type)。char类型的长度是固定的,上一篇讲到,在C++中它可能是1个字节,或者2个字节(取决于是否为Unicode Char),而在C#中,它永远是2个字节。2. string是一个模板类型,也就是一 阅读全文
posted @ 2013-05-07 17:45 冠冕堂皇 阅读(648) 评论(0) 推荐(1)

摘要:以下的代码演示了如何使用LINQ to XML来快速创建一个xml:隐藏行号 复制代码 ? 创建 XMLpublic static void CreateDocument(){ string path = @"d:\website"; XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), new XElement("Root", "root")); xdoc.Save(path);}运行 阅读全文
posted @ 2013-02-26 10:24 冠冕堂皇 阅读(176) 评论(0) 推荐(0)

摘要:最近在网上发现这篇文章,看看自己的编程习惯掌握了多少?1. 避免将多个类放在一个文件里面。2. 一个文件应该只有一个命名空间,避免将多个命名空间放在同一个文件里面。3. 一个文件最好不要超过500行的代码(不包括机器产生的代码)。4. 一个方法的代码长度最好不要超过25行。5. 避免方法中有超过5个参数的情况。使用结构来传递多个参数。6. 每行代码不要超过80个字符。7. 不要手工的修改机器产生的代码。a) 如果需要编辑机器产生的代码,编辑格式和风格要符合该编码标准。b) Use partial classes whenever possible to factor out the maint 阅读全文
posted @ 2012-09-04 14:09 冠冕堂皇 阅读(168) 评论(0) 推荐(0)

摘要:注意横向线条和纵向线条的规律,横向DrawLine(Pen, x1, y1 ,x2 ,y2),纵向规律是DrawLine(Pen,y1,x1,y2,x2)代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication2{ pub... 阅读全文
posted @ 2012-05-24 14:09 冠冕堂皇 阅读(2120) 评论(0) 推荐(0)