c# 关键字delegate、event(委托与事件)[MSDN原文摘录][2]
//Demo1:Declaring an event in an interface and implementing it in //a class. // event_keyword.cs
using System;
public delegate void MyDelegate(); // delegate declaration public interface I
{
event MyDelegate MyEvent;
void FireAway();
} public class MyClass: I
{
public event MyDelegate MyEvent; public void FireAway()
{
if (MyEvent != null)
MyEvent();
}
} public class MainClass
{
static private void f()
{
Console.WriteLine("This is called when the event fires.");
} static public void Main ()
{
I i = new MyClass(); i.MyEvent += new MyDelegate(f);
i.FireAway();
}
}
//Demo2:One use for accessor-declarations is to expose a large //number of events without allocating a field for each event, but //instead using a hash table to store the event instances. This is //only useful if you have a very large number of events, but you //expect most of the events will not be implemented. // event_keyword2.cs
using System;
using System.Collections; public delegate void MyDelegate1(int i);
public delegate void MyDelegate2(string s);
public delegate void MyDelegate3(int i, object o);
public delegate void MyDelegate4(); public class PropertyEventsSample
{
private Hashtable eventTable = new Hashtable(); public event MyDelegate1 Event1
{
add
{
eventTable["Event1"] = (MyDelegate1)eventTable["Event1"] + value;
}
remove
{
eventTable["Event1"] = (MyDelegate1)eventTable["Event1"] - value;
}
} public event MyDelegate1 Event2
{
add
{
eventTable["Event2"] = (MyDelegate1)eventTable["Event2"] + value;
}
remove
{
eventTable["Event2"] = (MyDelegate1)eventTable["Event2"] - value;
}
} public event MyDelegate2 Event3
{
add
{
eventTable["Event3"] = (MyDelegate2)eventTable["Event3"] + value;
}
remove
{
eventTable["Event3"] = (MyDelegate2)eventTable["Event3"] - value;
}
} public event MyDelegate3 Event4
{
add
{
eventTable["Event4"] = (MyDelegate3)eventTable["Event4"] + value;
}
remove
{
eventTable["Event4"] = (MyDelegate3)eventTable["Event4"] - value;
}
} public event MyDelegate3 Event5
{
add
{
eventTable["Event5"] = (MyDelegate3)eventTable["Event5"] + value;
}
remove
{
eventTable["Event5"] = (MyDelegate3)eventTable["Event5"] - value;
}
} public event MyDelegate4 Event6
{
add
{
eventTable["Event6"] = (MyDelegate4)eventTable["Event6"] + value;
}
remove
{
eventTable["Event6"] = (MyDelegate4)eventTable["Event6"] - value;
}
}
} public class MyClass
{
public static void Main()
{
}
}
//Deom3 public class SampleEventArgs
{
public SampleEventArgs(string s) { Text = s; }
public String Text {get; private set;} // readonly
}
public class Publisher
{
// Declare the delegate (if using non-generic pattern).
public delegate void SampleEventHandler(object sender, SampleEventArgs e); // Declare the event.
public event SampleEventHandler SampleEvent; // Wrap the event in a protected virtual method
// to enable derived classes to raise the event.
protected virtual void RaiseSampleEvent()
{
// Raise the event by using the () operator.
if (SampleEvent != null)
SampleEvent(this, new SampleEventArgs("Hello"));
}
}
参考链接:
http://msdn.microsoft.com/zh-cn/library/ms173171(v=vs.110).aspx
http://msdn.microsoft.com/zh-cn/library/awbftdfh.aspx
http://msdn.microsoft.com/zh-cn/library/8627sbea(v=vs.110).aspx
c# 关键字delegate、event(委托与事件)[MSDN原文摘录][2]的更多相关文章
- Delegate(委托与事件)
Delegate可以当它是一个占位符,比如你在写代码的时候并不知道你将要处理的是什么.你只需要知道你将要引入的参数类型和输出类型是什么并定义它即可.这就是书本上所传达的方法签名必须相同的意思. 系统自 ...
- c# 关键字delegate、event(委托与事件)[MSDN原文摘录][1]
A delegate is a type that safely encapsulates a method, similar to a function pointer in C and C++. ...
- Delegate event 委托事件---两个From窗体使用委托事件
窗体如下: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...
- 委托与事件--delegate&&event
委托 访问修饰符 delegate 返回值 委托名(参数); public delegate void NoReturnNoPara(); public void NoReturnNoParaMeth ...
- 浅谈C#委托和事件
委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本 ...
- 浅谈C#委托和事件【转】
委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本 ...
- 浅谈C#委托和事件(转载)
委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本 ...
- C#基础加强(8)之委托和事件
委托 简介 委托是一种可以声明出指向方法的变量的数据类型. 声明委托的方式 格式: delegate <返回值类型> 委托类型名(参数) ,例如: delegate void MyDel( ...
- C#语法之委托和事件
从大学就开始做C#这块,也做C#几年了,最近又从ios转回.Net,继续做C#,之前也没有写博客的习惯,写博客也是从我做ios的时候开始的,现在既然又做回了.net,那就写点关于.Net的博客,可能在 ...
随机推荐
- Spring管理Bean的三种创建方式
1.使用类构造器实例化 (90%以上都是使用这种) <bean id=“orderService" class="cn.itcast.OrderServiceBean&qu ...
- 使用ultramon调整任务栏高度
取消锁定,调整任务栏的高度为一行图标的高度,然后再锁定即可.为啥程序没有默认设置?
- hdu3007Buried memory(最小圆覆盖)
链接 普通的暴力复杂度达到O(n^4),对于这题肯定是不行的. 解法:随机增量算法 参考http://www.2cto.com/kf/201208/149602.html algorithm:A.令C ...
- Python学习(14)模块一
目录 Python 模块 import语句 from ... import 语句 from ... import * 语句 定位模块 PYTHONPATH变量 命名空间和变量 dir()函数. glo ...
- 抓取oschina上面的代码分享python块区下的 标题和对应URL
# -*- coding=utf-8 -*- import requests,re from lxml import etree import sys reload(sys) sys.setdefau ...
- Java将其他数据格式转换成json字符串格式
package com.wangbo.util; import java.beans.IntrospectionException; import java.beans.Introspector; i ...
- PHPStorm怎么修改选中的背景颜色呢?
File -> Settings -> editor ->color&fonts->general->下拉框中的selection background-> ...
- ZendStudio的配置导出
File(文件)->Export(导 出),再弹出Export窗口中点击"General(常规)",选择"Preferences(首选项)" 点击&quo ...
- Three.js 3D特效学习
一.Three.js基本介绍 Three.js是JavaScript编写的WebGL第三方库.提供了非常多的3D显示功能.Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场 ...
- pdmreader支持读取xml格式的pdm文件,无法读取二进制格式的pdm文件。
您的Pdm数据字典文件可能不被PDMReader读取,可能是因为pdm文件版本的问题.但 您可以通过PowerDesigner12(下载PowerDesigner12)进行转换 后进行读取. 您要做的 ...