
.Net 委托/反射/Generic
厦门德仔
毕业于南昌大学,英语6级,拥有超过13年的工作经验,数据库工程师(中级),ERP认证工程师,FRCA报表工程师,美国PMP项目管理师,具有项目管理能力,拥有多年项目实施与运维,精通SQL数据库,Asp.net和数据分析管理和开发。曾在台企,港企,美企,民企实施过多个完整ERP,WMS,EHR,OA,BI等项目。
-
转载 C# Socket编程(2)识别网络主机
通过前面的笔记我们可以知道:一个客户端想要发起一次通信,先决条件就是需要知道运行着服务器端程序的主机的IP地址是多少,端口号是多少。然后我们才能够通过这个地址向服务器特定的应用程序发送信息。对于网络上的两台计算机来说,用户操作的计算机称为本地主机,与该计算机通信的另一台计算机称为远程主机。识别远程主机依靠两部分组成:一是主机标识,用于识别与本地主机通信的远程主机;二是端口号,用于识别是再和远程主机2012-10-12 08:24:561411
0
-
原创 [反射]利用Activator.CreateInstance(type)实例化表单
通常我们在做BS项目树形菜单的,判断好权限后点击节点URL跳转到指定的页面最近好玩写写WINFORM,点击节点从数据库中读取类型 进行实例化,不认识!!!上网查查看到这个方法Activator.CreateInstance(type)就改改代码了: try { Type type = Type.Get2011-07-06 08:49:552165
0
-
转载 C#事件与委托的区别
<br />区别一:<br />事件在本类型外部只能用“+=”和“-=”去订阅/取消订阅代理;<br /><br />委托不管在本类型外部还是内部都可以用“+=”、“-=”和“=”订阅/取消订阅代理。<br />区别二:<br />事件只能在本类型内部“触发”;<br />委托不管在本类型内部还是外部都可以“调用”。<br />即:事件,只有本类才能激发这个事件,如果用委托取代的话,可想而知。<br />举个例子,按钮的Click事件,只有你的鼠标点击按钮才能由按钮触发,如果Click是委托的话,不管鼠标点2010-11-22 00:19:001896
0
-
转载 C#事件-设计准则
2010年04月22日 20:14<br /><br />事件设计的四个步骤<br />1 在事件发行者中定义一个事件<br />2 在事件发行者中触发事件<br />3 在事件订阅者中定义事件处理程序<br />4 向事件发行者订阅一个事件<br /><br />下面我们看一个小例子,打印出键盘的按键操作:<br />using System;<br />namespace Csharpdemo<br />{<br /> publicclass EventDemo <br /> {<br />2010-11-22 00:18:001372
0
-
转载 C#事件-自定义事件的使用方法
1、声明一个委托类 public delegate SomethingChangedHandler(object sender,EventArgs e);<br />2、在你的类中声明一个事件绑定到该委托 public event SomethingChangedHandler Changed;<br />3、在相应的方法中触发此事件<br />public void ChangeSomething()<br />{<br /><br />Changed(this,new EventArgs); //触发事2010-11-22 00:16:001125
0
-
转载 C#事件-定义事件
<br />具体方法: 定义事件 委托定义:<br />public delegate void EventFountion(Param param); 事件定义:<br />public event EventFountion eventFountion; 调用事件:<br />if (eventFountion!= null) eventFountion(this.param); 使用事件 事件触发后的方法<br />public void a_eventFountion(Param param2010-11-22 00:15:001277
0
-
转载 C#事件-事件处理
<br />万物皆对象!对象与对象之间不仅仅是存在关系,更是具有千丝万缕的联系。即:如何使得一个对象发生变化时,另一个对象也能随之发生变化。这种“一个对象的状态改变导致其它对象状态改变”的现象,我们称之为事件。<br />定义:事件,是用来描述类的成员发生改变的对象。<br />我们举一个例子,来理解上面的定义:<br /><br />例如:路边有一条狗。你看它不爽,于是走上前去踢了它一脚。我们来看紧接着发生的事情:<br />1、这条狗很胆小,它跑掉了;<br />2、这条狗是恶狗,它将你反咬一口;<br2010-11-22 00:13:001037
0
-
转载 C#事件-事件学习好例子
<br />一、委托的简介<br />二、事件的简介<br />三、委托和事件的使用<br />四、总结<br />一、委托的简介<br /><br />1、委托的声明:<br />delegate HandlerName ([parameters])<br />例如:<br />public delegate void PrintHandler(string str);<br /><br /> 委托声明定义了一种类型,它用一组特定的参数以及返回类型来封装方法。对于静态方法,委托对象封装要调用的方2010-11-22 00:11:00736
0
-
转载 C#事件-自定义事件
<br />事件有很多,比如说<br />鼠标的事件:MouserMove,MouserDown等。<br />键盘的事件:KeyUp,KeyDown,KeyPress。<br /><br />有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎么联系起来的呢?委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理。<br /><br />比如在WinForm中最常见的是按钮的Click事件,它是这样委托的:this.button1.Click += new2010-11-22 00:10:00882
0
-
转载 C#事件-使用简单实例
<br />1. 在文件 OutputChoose.cs 中封装了方法作为委托:<br />using System;<br />using System.Collections.Generic;<br />using System.Text;<br />namespace beta<br />{<br /> class OutputChoose<br /> {<br /> public string message = "你有新消息,请注意查收。";//声明短消息字串<br />2010-11-22 00:09:001053
0
-
转载 [泛型]-使用IComparer子类的Sort排序方法
泛型的排序有3种方法,分别是:1、List.Sort(),只能在集合元素实现了IComparable泛型接口时使用2、List.Sort(Comparison),Comparison是一个方法委托,它带有2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如何排序;3、List.Sort(IComparer),使用实现了IComparer接口的类给集合排序,可以灵活2010-11-21 23:05:001066
0
-
转载 [泛型]-使用委托的Sort排序方法
泛型的排序有3种方法,分别是:1、List.Sort(),只能在集合元素实现了IComparable泛型接口时使用2、List.Sort(Comparison),Comparison是一个方法委托,它带有2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如何排序;3、List.Sort(IComparer),使用实现了IComparer接口的类给集合排序,可以灵活2010-11-21 23:04:00888
0
-
转载 C# Socket编程(1)基本的术语和概念
计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础。那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因。C#语言从一开始就是为了互联网而设计的,它为实现程序的相互通信提供了许多有用API,这类应用编程接口被称为套接字(Socket)。在开始学习C# Socket之前我们需要先来了解一下基本的术语和概念。1.计算机网络 计算机网络由一组通过通信2012-10-12 08:24:081214
0
-
转载 C#事件-预定义事件处理方式
学习事件,我觉得最不好理解的就是C#中预定义了事件,事件有很多种,比如说鼠标的事件:MouserMove,MouserDown等,键盘的事件:KeyUp,KeyDown,KeyPress。EventArgs是包含事件数据的类的基类,用于传递事件的细节。有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎么联系起来的呢?委托就是他们中间的桥梁,事件发生时,委托会知道,然后将事2010-11-22 00:17:001689
0
-
转载 [泛型]集合Dictionary
在System.Collections.Generic命名空间中,与ArrayList相对应的泛型集合是List,与HashTable相对应的泛型集合是Dictionary,其存储数据的方式与哈希表相似,通过键/值来保存元素,并具有泛型的全部特征,编译时检查类型约束,读取时无须类型转换。电话本存储的例子中,使用Dictionary来存储电话本信息,代码如下:Dictionary ht=ne2010-11-21 22:57:001352
0
-
转载 [泛型]使用泛型List
一、泛型的优点性能高。从前面的例子可以看出使用不需进行类型转换,可以避免装箱和拆箱操作,提高性能。类型安全。泛型集合对其存储对象进行了类型约束,不是定义时声明的类型,是无法存储到泛型集合中的,保证了数据类型的安全。代码重用。使用泛型类型可以最大限度地重用代码,保护类型的安全以及提高性能。使用泛型使用泛型可以定义泛型类,泛型接口,泛型方法等。.NET Framework类库在Sy2010-11-21 22:53:001137
0
-
转载 [泛型]什么是泛型
泛型:即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。C#泛型的作用概述:C#泛型赋予了代码更强的类型安全,更好的复用,更高的效率,更清晰的约束。在一个方法中,一个变量的值是可以作为参数,但其实这个变量的类型本身也可以作为参数。泛型允许我们在调用的时候再指定这个类型参数是什么。在.net中,泛型能够2010-11-21 22:55:001057
0
-
转载 [泛型]集合Dictionary入门
1、命名空间: System.Collections.Generic(程序集:mscorlib)2、描述: 1)、从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成 2)、任何键都必须是唯一的 3)、键不能为空引用null(VB中的Nothing),若值为引用类型,则可以为空值 4)、Key和Value可以是任何类型2010-11-21 22:58:00890
0
-
转载 [泛型]-泛型接口IComparable
系统提供了许多泛型类和泛型接口,List和Dictionary是常用的泛型类。IComparable是最常用的泛型接口。泛型接口具有一般接口的共同特点,即在接口中可以包含字段,属性,方法和索引器,但都不能实现。IComparable和IComparer接口区别如下:◆IComparable在要比较的对象的类中实现,可以比较该对象和另一个对象;◆IComparer在一个单独的类中实现,可2010-11-21 23:00:00908
0
-
转载 [泛型]-泛型接口IComparer——比较器
IComparer接口定义了为比较两个对象而实现的方法。其定义如下:public interface IComparer{inr Compare(T x,T y);}类型参数“T”是要比较的对象的类型。Compare方法比较两个对象并返回一个值,指示一个对象是小于,等于还是大于另一个对象。参数x是要比较的第一个对象,y是要比较的第二个对象,均属于类型T。如果返回值大于0,则2010-11-21 23:01:001164
1
-
转载 [泛型]-无参数的Sort排序方法
泛型的排序有3种方法,分别是:1、List.Sort(),只能在集合元素实现了IComparable泛型接口时使用2、List.Sort(Comparison),Comparison是一个方法委托,它带有2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如果排序;3、List.Sort(IComparer),使用实现了IComparer接口的类给集合排序,可以灵活2010-11-21 23:03:00795
0
-
转载 C#事件-经典小例子
public class EatEventArgs : EventArgs ...{ public String restrauntName; //饭店名称 public decimal moneyOut; //准备消费金额 } /**//// /// 这个委托用来说明处理吃饭事件的方法的方法头(模式) /// public delegate void EatEventHandler(obje2010-11-22 00:09:00852
0
-
转载 C#事件-探寻事件本质
<br />如何定义一个事件?<br />语法:访问修饰符 event关键字 委托类名 事件名;<br />比如:public event somedelegatename myeventname;<br />事件到底是什么类型(引用?值?)<br />事件其实就是一个特殊的委托。<br />MSDN中的C#参考里这样描述:事件是特殊类型的多路广播委托,仅可从声明它们的类或结构(发行者类)中调用。如果其他类或结构订阅了该事件,则当发行者类引发该事件时,会调用其事件处理程序方法。<br />对于这一点,我们也2010-11-22 00:07:00852
0
-
转载 C#委托-在窗体中使用委托和事件
委托和事件在C#中使用非常广泛,例如,当我们点击某个“按钮”的时候,就会有一个“Click”事件触发,而这个事件会通知“委托”,在C#窗体应用程序中,“委托”的名字比较规范,统一使用“EventHandler”,它的具体格式是“void EventHandler(object sender, EventArgs e);”。相信大家都写过下面这样子的HelloWorld程序:<br /><br />当点击按钮的时候弹出一个对话框。我们怎样实现的呢?你肯定会说,我们在设计窗口双击按钮,就会自动为我们生成类似2010-11-22 00:06:001216
0
-
转载 C#事件-换一个角度理解委托和事件
我们建一个控制台程序。<br />未使用委托、事件之前的代码<br /> using System; <br /> class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> //实例化一个button类<br /> Button btn = new Button();<br /> b2010-11-22 00:12:00873
0
-
转载 C#事件-简单实例
委托声明定义了一种类型,它用一组特定的参数以及返回类型来封装方法。对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时委托一个实例和该实例上的一个方法。委托要求添加到委托列表中的所有方法都必须有相同的签名。 事件发行者(Publisher):也称事件发送者(sender),其实就是一个对象,这个对象自行维护本身的状态信息。当本身状态信息变动时,便触发一个事件,并通知所有的事件订阅者。事件订阅者(Subscriber):对事件感兴趣的对象,也称为接收者(receiver)2010-11-22 00:08:00910
0
-
转载 C#事件-使用事件需要的步骤
<br />事件是C#中另一高级概念,使用方法和委托相关。奥运会参加百米的田径运动员听到枪声,比赛立即进行。其中枪声是事件,而运动员比赛就是这个事件发生后的动作。不参加该项比赛的人对枪声没有反应。<br /><br />从程序员的角度分析,当裁判员枪声响起,发生了一个事件,裁判员通知该事件发生,参加比赛的运动员仔细听枪声是否发生。运动员是该事件的订阅者,没有参赛的人不会注意,即没有订阅该事件。<br />C#中使用事件需要的步骤:<br />1、创建一个委托;<br />2、将创建的委托与特定事件关联(.N2010-11-22 00:04:00973
0
-
转载 C#事件-什么是事件
<br />每天,我们的身边都在发生各种各样的新闻和事件,有让人不快的事件:跟女朋友分手了,国足又输了,飞机失事了,海地地震了……也有幸运的事件:考试拿了个高分,申雪赵宏博拿到冠军了……等等。<br />什么是事件?<br />这个问题曾经让我十分困扰,在《C#高级编程第6版》中,对事件是这样说的:事件表示C#中已定义的一个对象,即处理通知过程的对象。可是这样说未免抽象,对于像我这样的初学者往往还是难以理解。而我的理解是,事件是处理事件的对象感兴趣的,能够感知或捕获到一种事物状态的改变。说白了,事件即改变。2010-11-22 00:04:001090
0
-
转载 C#委托-小结
<br />委托包含对方法(不是方法名)的引用。使用委托可以在运行时决定调用哪个方法,甚至可以不用知道方法名就可以调用方法(因为我们是使用委托的对象来进行执行方法),执行(或调用)委托实际上将执行该委托所引用的方法。<br />委托将一个委托对象与所指定的方法联系起来,该方法的实现就可以与该委托对象联系起来,这样该委托对象就可以调用那个特定的方法。但是,委托要求方法和委托的定义具有相同的方法签名(即两者都要接受相同个数和类型的参数),并返回相同类型的参数。<br />注:被委托的方法的返回类型和参数列表相同2010-11-22 00:02:00723
0
-
转载 C#委托-使用匿名方法
<br />使用C#委托还有另一种重要方法--通过匿名方法。其中,匿名方法是用作委托参数的一个代码块。请看下面的例子:<br />匿名方法的作用是使代码更简化,方便了程序员。如果没有匿名方法,则定义一套事件监听需要这样:<br /> <br />class Program<br />{<br /> public delegate void SomeDelegate(); // 定义委托<br /> <br /> static void Main()<br /> {<br />2010-11-22 00:01:00951
0
-
转载 C#委托-概念理解
<br />MSDN上对委托的定义:委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。<br />C#是一种面向对象的语言,C#一切皆对象。因此潜意识的想用面向对象来解释“委托”。但发现不论怎么解释都解释不了,也就越来越糊涂了,到最后不了了之。<br />我们何不抛开面向对象,一步步的来看看什么是委托。首先对于委托我就看到的最多的一个概念是什么?没错是“方法”。方法:是一个带名称的、独立的、以可重用的方式放置的代码片段。方法无需应用程序其他部分的干预便能运行,如果创建的正确,2010-11-21 23:59:00780
0
-
原创 C#委托-委托的使用
<br />定义和使用委托分三个步骤:<br />1、委托声明。2、委托实例化。3、委托调用。<br />一、定义委托<br /><br />定义委托的语法如下:<br /><访问修饰符> delegate 返回类型 委托名();<br />定义委托和定义方法很相似,委托没有具体的实现体,由关键字delegate声明,直接以分号结束。委托能够代表什么样的方法,由它的返回值类型和参数列表决定。如下定义如下委托:<br />public delegate void MyDelegate(string name)2010-11-21 23:55:00966
0
-
原创 C#委托-委托和事件(来自张子阳)
<br />引言<br /><br />委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里憋得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。<br /><br />将方法作为方法的参数<br2010-11-21 23:53:001125
0
-
原创 C#事件-事件本身就是一种多播委托
<br />C#中的事件就是委托的一个变量。它和属性、方法一样,都是类的成员。只不过事件是指向一个方法,当事件被触发时,就会执行对象的相关方法。<br />事件的这种对方法的引用并不是写死在代码里面的,而是可以进行更改的。辟如:我们在DotNet中按钮的OnClick事件,它可以指向符合OnClick事件签名的任何一个方法。<br />1.事件的定义使用event关键字:<br />public event CryHandler DuckCryEvent;<br /><br />其中的CryHandler是2010-11-22 00:13:001306
0
-
转载 C#事件-综合案例分析
<br />面试题:晚上猫大叫一声,主人被惊醒,老鼠被下跑。用C#实现这个过程。<br /><br />这个题目中一共有三个对象:猫、主人和老鼠。这三个对象之间即不属于Is a...的关系,也不属于Has a...的关系,但三者又有相互联系。<br /><br />不能把主人和老鼠作为猫的成员变量出现,因为猫对象并不拥有主人和老鼠这两个对象。<br />不能在猫任何方法中实例化主人和老鼠。因为猫的任何动作都不会动态产生主人和老鼠。<br />不能在猫的Cry方法中传入主人对象和老鼠对象,因为猫大叫不是为了叫2010-11-22 00:14:001251
1
-
转载 C#事件-事件解析
<br />事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂。而这些东西却往往又是编程中常用且非常重要的东西。大家都知道windows消息处理机制的重要,其实C#事件就是基于windows消息处理机制的,只是封装的更好,让开发者无须知道底层的消息处理机制,就可以开发出强大的基于事件的应用程序来。<br /><br />在以往我们编写这类程序中,往往采用等待机制,为了等待某件事情的发生,需要不断地检测某些判断变量,而引入事件编程后,大大简化了这种过程:<br />- 使用事件,可以很2010-11-22 00:05:00940
0
-
转载 C#委托-多播委托调用多个方法
我们可不可以将两个以上的方法委托给一个对象呢?当然可以。多播委托就是指引用多个方法委托,它也是一个委托,当调用委托时,它连续调用每个方法,只要这些方法的签名与委托的定义相同。为了把委托的单个实例合并为一个多播委托,委托必须是同类型的,返回类型必须是void,不能带输出参数(但可以带引用参数),如果委托是有返回值的函数,则只能调用最后一个委托函数。当调用多播委托里,委托所表示的每个方法依次调用。如果有任何参数,它们将用于所有的方法。多播委托:1.委托声明包含的方法返回值必须为voi2010-11-22 00:03:001851
0
-
原创 C#委托-委托作为方法的参数
委托其实就像个中介,用于将方法传递给其他方法作为参数:using System;public delegate void mydelegate(string s); //声明参数为字符串无返回值的委托class Program{static void Main(){ Program p = new Program(); //实例化类 mydelegate my1 = new mydelegate(p.show2); //用被调用的方法实例化委托2010-11-22 00:00:001017
0
-
转载 C#委托-总结实例
<br />委托是对函数的封装,可以当做给方法的特征指定一个名称。它本质上就是变相的类型安全的指针。<br />假想场景:01国际计算机语言大会上,各种计算机语言汇聚一堂,共同探讨计算机语言的发展趋势和优势。由于语言众多,主办方pc和mac决定给每位参会者10分钟发言机会。Code is cheap。看看它们都怎么说:<br />类图:<br /><br />代码如下:<br />using System;<br />using System.Collections.Generic;<br />using2010-11-21 23:58:00807
0
-
转载 C#委托-知识点总结
<br />1.委托概念:<br />当要把方法传送给其它方法时,需要使用委托。委托是一种特殊的引用类型,用于封装命名方法(静态或实例)或匿名方法。委托的作用相当于给方法签名指定名称。使用delegate关键字来声明一个委托引用类型,这种特殊的引用类型称为委托。<br />2.定义委托:<br />告诉编译器某个委托引用了某种类型的方法。<br />定义引用无参数的方法的委托<br />delegate string TestDelegate1 ();//定义了一个委托TestDelegate1,引用了返回2010-11-21 23:57:00707
0