`

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

    博客分类:
  • 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();
        }
    }
}
分享到:
评论

相关推荐

    C#委托示例代码

    本示例代码将深入探讨C#委托的使用及其重要性。 首先,理解委托的基本概念是至关重要的。在C#中,委托是一种类型,它封装了指向静态或实例方法的指针。这使得我们可以将方法当作其他方法的参数,或者存储在类的字段...

    C#委托实例 简单易懂

    以下是一个简单的多播委托示例: ```csharp public static void AddMethod(MyDelegate del) { del += DisplayMessage; } public static void RemoveMethod(MyDelegate del) { del -= DisplayMessage; } // 调用...

    C#源代码-使用委托进行窗体间的传值.zip

    本资源"**C#源代码-使用委托进行窗体间的传值.zip**"提供了一组示例代码,帮助开发者理解如何在不同窗体间通过委托传递数据。下面我们将详细探讨这一主题。 首先,委托在C#中是一种类型,它是对方法的引用。它定义...

    C#委托实例简单分析与应用

    委托的真正价值在于其匿名性和多播能力。例如,`MultiCall`方法接收一个`SimpleDelegate`实例和一个整数`count`,并根据`count`的值重复调用该委托所封装的方法: ```csharp void MultiCall(SimpleDelegate d, int ...

    weituo.zip_委托

    总的来说,"weituo.zip_委托"中的示例可能演示了如何创建、实例化和使用委托,以及如何将委托与事件相结合来构建灵活的代码结构。学习和理解委托是掌握C#高级特性和设计模式的关键步骤,能够帮助我们编写出更高效、...

    委托与事件-修订版.pdf

    - **场景一:** 静态方法和实例方法的委托使用。展示了如何使用委托调用静态和实例方法。 - **场景二:** 通过事件的触发来实现灰太狼“叫一声”时羊群“逃跑”的逻辑。这里需要两个类:`Wolf`和`Goat`,当`Wolf`的`...

    C#范例开发大全源代码--刘丽霞版

    【压缩包子文件的文件名称列表】"C#范例开发大全源代码--刘丽霞版" 暗示文件包含了一系列C#编程的示例代码,这些代码可能覆盖了C#语言的基本概念到高级特性,包括但不限于: 1. **基础语法**:如变量声明、数据类型...

    对C#委托及事件委托的理解

    接下来,我们将通过示例代码进一步理解委托的工作原理: ```csharp using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { // 创建委托实例 MyDelegate d1 = ...

    DotNetty系列五:使用委托和事件调整代码模式,项目代码

    - 根据提供的压缩包文件 `Lession4`,我们可以推测这是教程的第四部分,可能包含关于如何在实际项目中使用委托和事件的具体示例代码。 - 通过查看这些文件,你可以更深入地理解如何在 DotNetty 框架下集成和使用...

    c#版23种设计模式示例代码

    在C#中,可以使用静态成员或者`lock`关键字实现,但更推荐使用`Lazy&lt;T&gt;`或`Singleton&lt;T&gt;`结构。 2. **工厂模式**:提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。C#中的工厂方法可以是...

    设计模式源代码--工厂模式与单例

    设计模式是软件开发中的宝贵经验总结,用于解决常见的设计问题并提供可复用的解决方案。本资源主要关注两种经典的设计模式:...在阅读和分析提供的`DesignMode`代码示例时,你会更好地掌握这两种设计模式的实现细节。

    详解c# 委托链

    实际上,C#的委托本质上就是多播委托,也就是说,一个委托实例可以关联多个方法。因此,委托链只是多播委托的一个特殊形式,即按照特定顺序执行的多播委托。 总结来说,C#的委托链提供了一种灵活的方式来组织和执行...

    初级C#开发笔试题及答案

    16. C#代码示例: - 这段代码使用了`System.Threading.Timer`,创建了一个定时器,每隔2秒调用`CheckStatus`方法。 这些是C#初级开发者应该掌握的基础知识,包括数据类型、数组、结构体、类、静态成员、委托、继承...

    c#中的委托及其调用

    #### 示例代码解析 以下是一个具体的例子,展示了如何在C#中使用委托: ```csharp namespace DelegateTest { public delegate int MyDelegateTest(int i, int j); class Calculate { public static int Add...

    使用C#多线程应用程序 - 示例

    通过以上示例,我们可以看到C#中使用多线程的基本方式。通过引入`System.Threading`命名空间,我们能够利用`Thread`类和其他相关类来创建并管理线程。这些基础示例展示了如何创建简单的线程,并行执行多个任务,以及...

    C#下的Delagate实例

    C#中的委托支持多播,意味着一个委托实例可以同时引用多个方法。这可以通过使用`+`运算符来添加更多的方法到现有的委托实例: ```csharp myDelegate += AnotherMethod; ``` 4. **委托的调用** 调用委托就像...

    C#反射实例讲解C#反射实例讲解

    ##### 示例代码解析 下面通过具体的代码示例来深入了解如何在C#中使用反射: ```csharp // 1. 使用反射加载DLL文件 using System; using System.Reflection; public void test1() { Assembly ass; Type type; ...

    .NET委托解析

    多个委托可以通过`+`操作符合并,通过`-`操作符删除特定的委托实例。这在处理事件时非常有用,可以添加或移除事件处理程序。 【四】委托的源码解析 委托实质上是.NET框架内部的System.Delegate类的实例。委托的...

    C#设计模式示例代码

    C#设计模式示例代码集合了23种经典的设计模式,由James W. Cooper编写,为C#开发者提供了宝贵的资源,帮助他们提升代码质量和可维护性。下面将详细阐述这23种设计模式及其在C#中的应用。 1. 单例模式(Singleton)...

Global site tag (gtag.js) - Google Analytics