• Java与.net的区别delegate和event


    There is no delegate concept in Java
    The right-side C# program may be mimiced 
    with reflection technology.
    
    
    在Java中没有delegate的概念,而C#中delegate使用的是类似Java中反射的工具。
    
    
    import java.lang.reflect.*;
    import java.io.*;
    public class Test
    {
        public static void main(String[] args) throws Exception
        {
            String[] list= {"to","be","or","not","to","be"};
            Method m1 = Test.class.getMethod("toConsole",new Class[] {String.class});
            Display(m1, list);
            Method m2 = Test.class.getMethod("toFile",new Class[] {String.class});
            Display (m2, list);
        }
        public static void toConsole (String str)
        {
            System.out.print(str+" ");
        }
        public static void toFile (String s)
        {
            File f = new File("delegate.txt");
            try{
                PrintWriter fileOut = 
                   new PrintWriter(new FileOutputStream(f));
                fileOut.write(s);
                fileOut.flush();
                fileOut.close();
            }catch(IOException ioe) {}
        }
        public static void display(Method m, String[] list)
        {
            for(int k = 0; k < list.length; k++) {
                try {
                    Object[] args = {new String(list[k])};
                    m.invoke(null, args);
                }catch(Exception e) {}
            }
        }
    }
     
    
    
    Delegate是引用类型允许间接访问方法。以下是简单和多维的委托Delegate
    Delegates are reference types which allow 
    indirect calls to methods. There are single and multicast
    delegates.
    ============================================
     using System;
     using System.IO;
     public class DelegateTest
     {
         public delegate void Print (String s);
         public static void Main()
         {
             Print s = new Print (toConsole);
             Print v = new Print (toFile);
             Display (s);
             Display (v);
         }
         public static void toConsole (String str)
         {
             Console.WriteLine(str);
         }
         public static void toFile (String s)
         {
             File f = new File("delegate.txt");
             StreamWriter fileOut = f.CreateText();
             fileOut.WriteLine(s);
             fileOut.Flush();
             fileOut.Close();
         }
         public static void Display(Print pMethod)
         {
             pMethod("This should be displayed in the console");
         }
     }
     A delegate instance encapsulates one or more methods, 
     each of which is referred to as a callable entity. 
     To add or reduce a list of calls
     by using operators += or -=.
     for example
     Print p = s + v;
     s += v;
    
    
    对比可以得出的概念是:Java中没有这个Delegate的概念,但是通过反射的方法可以实现,C#却可以通过直接使用Delegate用来实现函数方法的间接调用。
  • 相关阅读:
    day-7
    Redis数据库 : 基础
    MongoDB与python交互
    MongoDB数据库 : 管道,用户管理,副本集等
    MongoDB数据库 : 基础
    MySQL数据库 : 自关联,视图,事物,索引
    MySQL数据库 : 查询语句,连接查询及外键约束
    MySQL数据库 : 基本语句
    数据结构与算法 : 树与遍历
    python__标准库 : 测试代码运行时间(timeit)
  • 原文地址:https://www.cnblogs.com/timlong/p/3919028.html
Copyright © 2020-2023  润新知