dz2345.NET
不许不许联想~
C#.Net笔记其之三:委托
若覆写了 Equals() 方法,也必须覆写 GetHashCode() 方法,保证两个相等的对象拥有一致的 HashCode。
自定义异常不应从基类 SystemException 派生,而推荐继承于 ApplicationException。ApplicationException 扩展 Exception,但不添加新功能。此异常作为一种区分应用程序定义的异常与系统定义的异常的方法而提供。
委托:
委托是一种定义了引用方法的类型。我们能为委托分配和它具有相同方法签名的静态或者实例方法。
一旦为委托分配了方法,委托将与该方法具有完全相同的行为。
它就类似于 C++ 中的函数指针,但委托更安全可靠。委托就像是一类具有相同签名的方法的抽象,把它看作一个类就很好理解了。
一个委托实例可以搭载多个方法。不过要求方法的返回值为空,且不能有输出参数。
一个委托实例所搭载的方法并不需要属于同一个类。
委托的声明:
namespace
cnblogs
//
声明直接放 namespace 后面就行了
public
delegate
void
blogNow(
string
userID);
public
class
Bloger()
{
}
太麻烦了,直接例子。
我仿造msdn webcast morden c# 11讲中的例子写的:
using
System;
namespace
dz2345
{
public
delegate
void
BlogNow(
string
s);
public
class
Bloger
{
string
userID;
public
Bloger(
string
id)
{
this
.userID
=
id;
}
//
bloger做了动作之后,会得到结果反馈
public
void
WriteArticle(
string
s)
{
Console.WriteLine(
"
{0}更新了{1}
"
, userID, s);
}
public
void
UploadPhoto(
string
category)
{
Console.WriteLine(
"
{0}更新了{1}
"
, userID, s);
}
}
public
class
ArticleSystem
{
//
这里event写成new能通过,但会警告;其实等价于
//实例化 BlogNow NewArticleHandle=new BlogNow()
public
event
BlogNow NewArticleHandler;
public
void
Accept()
{
if
(NewArticleHandler
!=
null
)
{
NewArticleHandler(
"
文章
"
);
}
}
//
这里是实现的是多播委托,所以能相加
public
void
NewRequest(BlogNow bn)
{
NewArticleHandler
+=
bn;
}
}
public
class
PhotoSystem
{
public
event
BlogNow NewPhotoHandler;
public
void
Accept()
{
if
(NewPhotoHandler
!=
null
)
{
NewPhotoHandler(
"
照片
"
);
}
}
public
void
NewRequest(BlogNow bn)
{
NewPhotoHandler
+=
bn;
}
}
class
Program
{
static
void
Main(
string
[] args)
{
ArticleSystem a
=
new
ArticleSystem();
PhotoSystem p
=
new
PhotoSystem();
Bloger b1
=
new
Bloger(
"
刘备
"
);
Bloger b2
=
new
Bloger(
"
关羽
"
);
Bloger b3
=
new
Bloger(
"
张飞
"
);
//给委托传入具体的方法
a.NewRequest(
new
BlogNow(b1.WriteArticle));
a.NewRequest(
new
BlogNow(b2.WriteArticle));
p.NewRequest(
new
BlogNow(b2.UploadPhoto));
p.NewRequest(
new
BlogNow(b3.UploadPhoto));
a.Accept();
p.Accept();
Console.ReadLine();
}
}
}
经典例子:
一个C#睡前故事。
Tag标签:
c#.net
posted on 2008-02-10 23:37
dz
阅读(170)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
博客园首页
新闻频道
社区
小组
博问
网摘
闪存
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-02-10 23:51 编辑过
相关文章:
使用Visual Studio2005入门.Net2.0系列视频教程
Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
C# 中的委托和事件
C#下如何实现服务器+客户端的聊天程序
c#.net 邮件发送
C#.NET 中的类型转换[收藏]
相关链接:
最新IT新闻:
淘宝与微软总部达成首次合作 Silverlight加入店铺
苹果9日发布iTunes 8、iPhone 2.1和第四代iPod Nano
微软出品8GB蓝色和120GB Zune播放器
千亿美元市值榜:微软居首移动第二 诺基亚退榜
Google申请“海上数据中心”专利 可能付诸行动
导航
博客园
首页
新随笔
联系
订阅
管理
<
2008年2月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
统计
随笔 - 11
文章 - 0
评论 - 6
引用 - 0
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
最新评论
我的标签
留言簿
(1)
给我留言
查看留言
我参加的小组
web标准设计
.NET 3.x
读书(Books)
英语听力
我参与的团队
福州.NET俱乐部(0/517)
我的标签
c#.net
(4)
download
(3)
database
(3)
随笔档案
2008年4月 (2)
2008年3月 (1)
2008年2月 (8)
Links
CodePlex
(rss)
CodeProject
(rss)
MSDN Code Gallery
(rss)
最新随笔
1. 一个关于winform多线程的教程(pdf)
2. string类型是引用类型
3. Gmail favicon
4. Beginning C# 2008 Databases 笔记(三)
5. Beginning C# 2008 Databases 笔记(二)
6. C#.Net笔记其之三:委托
7. C#.Net笔记其之一
8. Beginning C# 2008 Databases 笔记(一)
9. C#.Net笔记其之二:ArrayList深层复制
10. 春节快乐~!