`

委托的使用示例代码--静态、实例、多播

    博客分类:
  • C#
阅读更多
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateExample
{
    /// <summary>
    /// 给排序算法传递一个动态比较函数的委托示例
    /// </summary>

    // 进行排序的委托
    public delegate bool Compare(int left, int right);

    public class MyDelegateTest
    {
        private int[] items;

        public int[] Items
        {
            set { items = value; }
            get { return items; }
        }

        // 比大
        public bool Greater(int left, int right)
        {
            return left > right;
        }

        // 比小
        public bool Less(int left, int right)
        {
            return !Greater(left, right);
        }

        public void Sort(Compare compare)
        {
            for (int i = 0; i < items.Length - 1; i++)
            {
                for (int j = i + 1; j < items.Length; j++)
                {
                    if (compare(items[i], items[j]))
                    {
                        int tmp = items[i];
                        items[i] = items[j];
                        items[j] = tmp;
                    }
                }
            }
        }
    }

    class Sort
    {
        /*
        public static void Main()
        {
            MyDelegateTest sample = new MyDelegateTest();
            int[] items = new int[10] { 7, 4, 9, 1, 3, 2, 8, 5, 6, 0};
            sample.Items = items;
            // 使用降序
            sample.Sort(new Compare(sample.Less));

            for (int i = 0; i < sample.Items.Length; i++)
            {
                Console.WriteLine(sample.Items[i]);
            }

            Console.Read();
        }*/
    }

    /// <summary>
    /// 一个简单的委托示例
    /// </summary>
    
    // 新建一个用以输出消息的委托
    public delegate void WriteMessage();

    public class MyDelegateTest2
    {
        // 一个输出消息的静态方法
        public static void StaticWrite()
        {
           Console.WriteLine("委托调用了一个静态方法.");
        }
                
        // 一个输出消息的类实例方法
        public void Write()
        {
            Console.WriteLine("委托调用了一个类实例方法.");
        }
    }

    class WriteMessageClass
    {
        public static void Main()
        {
            // 新建一个委托,回调函数是一个静态方法
            WriteMessage wm = new WriteMessage(MyDelegateTest2.StaticWrite);
            wm();
            Console.WriteLine();
            // 新建一个委托并与加到先前建立的委托组成委托链,回调函数是一个类实例方法
            MyDelegateTest2 mdt = new MyDelegateTest2();
            wm += new WriteMessage(mdt.Write);
            // 执行委托链上所有的回调函数
            wm();
            Console.Read();
        }
    }
}
分享到:
评论

相关推荐

    Url重写篇视频------本讲将通过实例比较ASP.NET下的三种典型URL重写方案

    本讲将通过实例比较ASP.NET下的三种典型URL重写方案——ISAPI重写(使用开源组件IIRF),ASP.NET2.0内置的urlMappings和基于自定义HTTPModule的URL重写(使用NBear.Web中的UrlRewriteModule实现),并探讨URL重写中...

    java编程基础,应用与实例

    2.3 HelloJava示例的分析 11 2.4 巩固练习 12 第3章 Java语言的基本语法 13 3.1 代码编写规则 13 3.2 注释 13 3.3 标识符 14 3.4 变量和常量 15 3.5 数据类型 16 3.5.1 基本数据类型 16 3.5.2 ...

    Visual C++ 2005入门经典--源代码及课后练习答案

    6.7 使用函数的示例 265 6.7.1 实现计算器 265 6.7.2 从字符串中删除空格 268 6.7.3 计算表达式的值 268 6.7.4 获得项值 271 6.7.5 分析数 272 6.7.6 整合程序 274 6.7.7 扩展程序 276 6.7.8 提取...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    CruiseYoung提供的带有详细书签... 8.6.3 使用有多个形参的类模板 405 8.6.4 函数对象模板 406 8.7 使用类 407 8.7.1 类接口的概念 407 8.7.2 定义问题 407 8.7.3 实现CBox类 408 8.8 组织程序代码 425 8.9 字符...

    asp.net知识库

    ASP.NET 2.0 正式版中无刷新页面的开发(示例代码的补充) ASP.NET2.0中themes、Skins轻松实现网站换肤! ASP.NET 2.0 中的代码隐藏和编译 ASP.NET 2.0 Language Swithcer and Theme Swicher 多语言转换和多样式主题...

    ASP.NET 3.5 开发大全11-15

    5.19.3 静态标签控件(Lieral) 5.19.4 动态缓存更新控件(Substitution) 5.20 小结 第6章 Web窗体的高级控件 6.1 登录控件 6.1.1 登录控件(Login) 6.1.2 登录名称控件(LoginName) 6.1.3 登录视图控件(LoginView...

    ASP.NET 3.5 开发大全1-5

    5.19.3 静态标签控件(Lieral) 5.19.4 动态缓存更新控件(Substitution) 5.20 小结 第6章 Web窗体的高级控件 6.1 登录控件 6.1.1 登录控件(Login) 6.1.2 登录名称控件(LoginName) 6.1.3 登录视图控件(LoginView...

    C#语言规范(4.0版本)

    10.5.2.1 对常量使用静态只读字段 291 10.5.2.2 常量和静态只读字段的版本控制 291 10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 ...

    微软C#语言规范,C#语言教程中文版

    10.5.2.1 对常量使用静态只读字段 291 10.5.2.2 常量和静态只读字段的版本控制 291 10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 ...

    C#语言规范4.0

    10.5.2.1 对常量使用静态只读字段 291 10.5.2.2 常量和静态只读字段的版本控制 291 10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 ...

    C#_语言规范_4.0_中文版

    10.5.2.1 对常量使用静态只读字段 291 10.5.2.2 常量和静态只读字段的版本控制 291 10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 ...

    C#语言规范(2.0,3.0,4.0合集)

    10.5.2.1 对常量使用静态只读字段 291 10.5.2.2 常量和静态只读字段的版本控制 291 10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 ...

    ASP.NET3.5从入门到精通

    5.19.3 静态标签控件(Lieral) 5.19.4 动态缓存更新控件(Substitution) 5.20 小结 第 6 章 Web 窗体的高级控件 6.1 登录控件 6.1.1 登录控件(Login) 6.1.2 登录名称控件(LoginName) 6.1.3 登录视图控件...

    ASP.NET 3.5 开发大全

    5.19.3 静态标签控件(Lieral) 5.19.4 动态缓存更新控件(Substitution) 5.20 小结 第6章 Web窗体的高级控件 6.1 登录控件 6.1.1 登录控件(Login) 6.1.2 登录名称控件(LoginName) 6.1.3 登录视图控件(LoginView...

Global site tag (gtag.js) - Google Analytics