首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 怎么对委托还是不理解,无敌郁闷! [已结帖,结帖人:chaye12]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chaye12
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-01 09:43:46 楼主
    谁能写个例子来解释下使用委托的3个步骤,
    1.声明委托
    2.实例化委托
    3.调用委托
    感觉自己还是不理解我晕!
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wonture
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 09:45:201楼 得分:0
    函数指针!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wonture
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 09:48:012楼 得分:0
    我也不是很理解……呵呵!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tmxk2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 09:55:323楼 得分:0
    http://www.jpinw.com/teach/bc/CVBJAVA/200806/1240195.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • weilong147247943
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 09:57:074楼 得分:0
              不清白,学习!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chaye12
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 10:02:565楼 得分:0
    谁能写个简单的分都给他!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hao1hao2hao3
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 10:04:196楼 得分:0
    http://www.cnblogs.com/finesite/articles/255884.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wuyq11
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 10:07:307楼 得分:0
    看看cnblogs.com上的代码
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hecker728
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 10:12:088楼 得分:10
    给你个简单的两个数相加的例子:
    using System;
    namespace Add
    {
        delegate void numberAdd(int a, int b);  //声明委托
        class program
        {
            static void Main()
            {
                numberAdd n1 = delegate(int a, int b)  //实例化委托对象,委托是引用类型。
                {
                    Console.WriteLine(a + b);
                };
                int x = int.Parse(Console.ReadLine());
                int y = int.Parse(Console.ReadLine());
                n1(x, y);
                Console.ReadLine();
            }
        }
    }

    要是你有C++的经验,委托就很好理解,就是函数指针。通俗点就是,函数的形参是函数。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • whitemfang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 10:13:479楼 得分:0
    我的理解,在.NET中委托就是一种特殊的接口。特殊之处还不清楚。
    事件是委托的实例。
    接口是一种特殊的抽象类。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • JeffChung
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 10:17:3810楼 得分:15
    C# code
    // keyword_delegate2.cs // Calling both static and instance methods from delegates using System; // delegate declaration delegate void MyDelegate(); public class MyClass { public void InstanceMethod() { Console.WriteLine("A message from the instance method."); } static public void StaticMethod() { Console.WriteLine("A message from the static method."); } } public class MainClass { static public void Main() { MyClass p = new MyClass(); // Map the delegate to the instance method: MyDelegate d = new MyDelegate(p.InstanceMethod); d(); // Map to the static method: d = new MyDelegate(MyClass.StaticMethod); d(); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • w161134025
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 10:21:4411楼 得分:15
    跟你差不多,帮你顶,多找下资料看下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunshine_anycall
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 10:48:5312楼 得分:0
    一楼的兄弟一语道破天机,呵呵
    在c++里函数名就是这个函数的地址的指针,可以直接把一个函数名作为参数传给另一个函数,并在那个函数里面执行!
    c#的指针一般是托管的,不能这样用,为了解决这个问题呢就用了委托这个东西。
    ----------------------
    1.声明委托
    2.实例化委托
    3.调用委托
    ----------------------
    声明委托就说定一个类型的函数的指针(也就是说函数的声明形式和这个委托的声明形式一致)如,
    C# code
    // Declare delegate -- defines required signature: delegate void SampleDelegate(string message);

    这就说明,凡是返回值类型void,参数类型为string的函数都可以有找个委托代理,如,
    C# code
    // Regular method that matches signature: static void SampleDelegateMethod(string message) { Console.WriteLine(message); }

    ===========
    实例化委托,这一步不用解释了吧
    C# code
    // Instantiate delegate with named method: SampleDelegate d1 = SampleDelegateMethod;

    ===========
    调用委托,把实例话之后的委托当你定义的那个函数一样调用就可以了
    C# code
    // Invoke delegate d1: d1("Hello");

    ===============End=====================
    另外:匿名方法
    实例化
    C# code
    // Instantiate delegate with anonymous method: SampleDelegate d2 = delegate(string message) { Console.WriteLine(message); };

    调用
    C# code
    // Invoke delegate d2: d2(" World");

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • phy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 10:55:2813楼 得分:10
    委托从本质上来说是类型安全的函数指针。
    至于三个步骤,我相信上面已经有很好的解释了:)

    至于你问的事件,事件从本质上来说就是一系列委托。它与委托的区别在于“一系列”。
    一个委托对象,只能够指向一个函数;而一个事件,可以绑定一系列的委托;你可以当一个普通的委托一样使用,但当你产生一个事件时,事实上执行的是一系列的委托,而不仅仅是一个。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chaye12
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 15:23:5414楼 得分:0
    匿名方法实例化为什么没方法名呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • leening102
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 15:41:2815楼 得分:0
    强烈楼主看这篇博客,很经典
    http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wjp_116
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 17:35:5416楼 得分:0
    引用 12 楼 sunshine_anycall 的回复:
    一楼的兄弟一语道破天机,呵呵
    在c++里函数名就是这个函数的地址的指针,可以直接把一个函数名作为参数传给另一个函数,并在那个函数里面执行!
    c#的指针一般是托管的,不能这样用,为了解决这个问题呢就用了委托这个东西。
    ----------------------
    1.声明委托
    2.实例化委托
    3.调用委托
    ----------------------
    声明委托就说定一个类型的函数的指针(也就是说函数的声明形式和这个委托的声明形式一致)如,



    强人,
    匿名方法实例化为什么没方法名呢?既然都叫匿名方法了,当然不需要方法名了,这是C#2.0新增加的特性,那些
    牛人在底层不知道做了什么连方法名都可以省了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kenthong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 17:45:1717楼 得分:0
    我也不太理解 帮顶了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lfzpf
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 22:21:0818楼 得分:0
    引用 13 楼 phy 的回复:
    委托从本质上来说是类型安全的函数指针。
    至于三个步骤,我相信上面已经有很好的解释了:)

    至于你问的事件,事件从本质上来说就是一系列委托。它与委托的区别在于“一系列”。
    一个委托对象,只能够指向一个函数;而一个事件,可以绑定一系列的委托;你可以当一个普通的委托一样使用,但当你产生一个事件时,事实上执行的是一系列的委托,而不仅仅是一个。

    委托也可以一系列的,呵呵,就是说的多播委托嘛!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • haozi678
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-01 22:37:2919楼 得分:0
    看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Sugar_Tiger
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-02 08:35:4120楼 得分:0
    引用 15 楼 leening102 的回复:
    强烈楼主看这篇博客,很经典
    http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html

    我见过的讲得最浅显易懂的莫过于张子阳讲的这篇了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cheng_er
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-02 09:17:0621楼 得分:0
    函数指针
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • guest78978
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-02 10:39:0322楼 得分:0
    mark
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved