zoukankan      html  css  js  c++  java
  • 委托的例子

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    
    namespace ConsoleDelget
    
    {
    class set
    {
    private object[] items;
    
    public set(int numItems)
    {
    items = new object[numItems];
    for (int i = 0; i < numItems; i++)
    items[i] = i;
    }
    public delegate void Feedback(object value, int item, int numitems);
    
    public void ProcessItems(Feedback feedback)
    {
    for (int item = 0; item < items.Length; item++)
    {
    if (feedback != null)
    feedback(items[item], item + 1, items.Length);
    }
    }
    }
    
    class Program
    {
    static void Main(string[] args)
    {
    StaticCallback();
    InstanceCallback();
    }
    static void StaticCallback()
    {
    set setOfitems = new set(5);
    setOfitems.ProcessItems(null);
    Console.WriteLine();
    //处理items元素并反馈输出到控制台
    setOfitems.ProcessItems(new set.Feedback(Program.FeedbackToConsole));
    Console.WriteLine();
    //处理items元素并反馈输出到控制台
    set.Feedback fb = null;
    fb += new set.Feedback(Program.FeedbackToConsole);
    setOfitems.ProcessItems(fb);
    Console.WriteLine();
    }
    static void InstanceCallback()
    {
    set setOfitems = new set(5);
    setOfitems.ProcessItems(null);
    //处理items元素并反馈到文件
    Program app = new Program();
    setOfitems.ProcessItems(new set.Feedback(app.FeedbackToFile)); 
    Console.WriteLine();
    }
    static void FeedbackToConsole(object value,int item,int numitems)
    {
    Console.WriteLine("procssing item {0} of {1}:{2}",item,numitems,value);
    }
    private void FeedbackToFile(object value, int item, int numitems)
    {
    StreamWriter sw = new StreamWriter("E:\xm\test.txt", true);
    sw.WriteLine("procssing item {0} of {1}:{2}", item, numitems, value);
    sw.Close();
    }
    
    }
    }

    委托是面向对象的,类型安全的,是引用类型(开始就说了委托是个类),所以在使用委托时首先要 定义——>声明——>实例化——>作为参数传递给方法——>使用委托。下面就具体看下如何使用委托的:

    一、定义:delegate void Mydelegate(type1 para1,type2 para2);

    二、声明: Mydelegate d;

    三、实例化:d =new Mydelegate(obj.InstanceMethod);(把一个方法传递给委托的构造器),前面三步就好比构造一个律师对象,方法InstanceMethod好比是当事人

    四、作为参数传递给方法:MyMethod(d);(委托实现把方法作为参数传入到另一个方法,委托就是一个包装方法的对象)

    五、在方法中使用委托。MyMethod方法好比是法官,MyMethod方法先调用委托,委托在调用方法InstanceMethod,这个过程就如法官向律师问话,然后律师之前肯定向当事人了解了案件的情况。C#委托中好比是律师,真真诉说案情的是当事人(真真被调用的是实例方法InstanceMethod)

    MyMethod方法的定义如下:

    privatevoid MyMethod(Mydelegate mydelegate)

    {
        // 使用委托    mydelegat(arg1,arg2);
    
    }
    
    InstanceMethod方法定义如下:
    privatevoid InstanceMethod(type1 para1, type2 para2)
    
    {
        // 定义方法
        console.write("hahha"+para1,para2);
    }
  • 相关阅读:
    《css世界》学习摘要
    微信小程序知识点积累
    事件冒泡 事件委派
    遍历后台返回数据
    初识open stack
    keystone初识
    KVM详解
    openstack详解
    NoSQL之Redis集群理论
    gfs分布式文件系统
  • 原文地址:https://www.cnblogs.com/lxc-binary/p/3257588.html
Copyright © 2011-2022 走看看