`

delegate 在Java和C#中的应用

 
阅读更多
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用来实现函数方法的间接调用。

转载自:http://blog.csdn.net/zzhays/article/details/11518925

分享到:
评论

相关推荐

    Head First设计模式高清中文版附带java和c#源码

    在Java中,有静态代理和动态代理(JDK Proxy或CGLIB),C#则有接口实现的代理和.NET框架的Delegate及Event。 6. **观察者模式**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的...

    C#与JAVA的比较

    6. **对象创建**:在C#和JAVA中,所有类都是从基础类`Object`派生而来,这意味着所有对象都共享了一些基本的行为特性。创建对象时通常使用`new`关键字。 7. **多线程支持**:C#和JAVA都内置了对多线程的支持,这为...

    C#和JAVA面试八股文

    在IT行业的求职面试中,C#和Java是两种广泛应用的编程语言,对于软件工程师来说,掌握这两者的基本概念和技术要点至关重要。本篇文章将探讨这些关键知识点,并为面试者提供宝贵的建议。 1. C#基础: - .NET框架:...

    java调用c#[定义].pdf

    在本文中,我们将探讨如何使用Java调用C#编写的COM组件,并实现C#与Java之间的事件通信。这个过程涉及到C#中COM组件的创建、事件接口定义以及Java端使用Jacob库来调用和响应COM组件的事件。 首先,我们需要在C#中...

    java 、C#程序员面试题

    9. **异常处理**:与Java类似,但C#中的异常处理更强调using语句和try-finally结构。 10. **AOP(面向切面编程)**:C#通过PostSharp等库支持AOP,理解切面、通知、织入等概念。 这些知识点构成了Java和C#程序员...

    c#语言c#语言c#语言

    C#在.NET框架下运行,它结合了C++的静态类型检查和Java的简洁性,是现代软件开发的重要工具之一。 在C#语言中,语法是其基础,它规定了编写代码的规则和结构。C#语法严格而清晰,遵循了C/C++的传统,但也引入了许多...

    C#与JAVA比较[文].pdf

    在软件开发领域,C#和JAVA是两种广泛应用的高级编程语言,它们都源于C++,但由不同的公司开发,形成了各自独特的特性和优势。本文将深入探讨这两种语言的相似之处以及它们之间的差异。 首先,C#和JAVA的共同点主要...

    C#教程(PPT) C#教程(PPT)

    C#是一种由微软公司开发的面向对象的编程语言,它主要应用于Windows平台,尤其是在.NET框架下,被广泛用于开发各种应用程序,包括桌面应用、Web应用和移动应用。本教程通过PPT的形式,深入浅出地介绍了C#的核心概念...

    C#应用题目答案

    本资源"‘C#应用题目答案’"针对初学者,旨在帮助他们理解和解决C#编程中的常见问题,提升编程能力。 C#的基础知识包括以下几个方面: 1. **基本语法**:C#语言的语法结构类似于C++和Java,包括变量声明、数据类型...

    个人c# 学习基础资料

    - **与 Java 的比较**:虽然两者都有很多相似之处,但 C# 在某些方面提供了更多的灵活性和功能,比如属性、索引器和事件等高级特性,这些使得 C# 在实现某些功能时更为简便。 - **中间语言 (IL)**:与 Java 字节码...

    .NET和JAVA的比较

    在JAVA中,Eclipse RCP是一个非常成熟的实现框架,它结合了桌面应用程序的优势和Web应用的可扩展性。而在.NET领域,Smart Client和ClickOnce技术提供了一种类似的功能,它们允许应用程序在用户的本地计算机上安装,...

    c#应用程序教程

    在本教程中,我们将深入探讨C#应用程序开发的基础知识和高级特性。 一、C#基础 C#的核心特性包括类型系统、类、对象、接口、继承、多态等。它支持静态类型,这意味着在编译时变量的类型就已经确定。类是C#中的基本...

    c# sample

    总结来说,C# 和JavaScript分别在服务器端和客户端有着广泛的应用。C# 的强类型、类型安全和丰富的库适合大型企业级应用开发,而JavaScript的灵活性和浏览器兼容性使其成为Web开发的首选。了解这两种语言的特点和...

    C#编程规范(针对于Java程序员)

    在C#中,类的定义与Java类似,但C#支持命名空间(Namespace),可以更好地组织代码。例如: ```csharp namespace MyProject { public class MyClass { // 类体 } } ``` ### 主函数 C#程序的入口点是`Main`方法...

    C#课件C#基础知识.ppt

    10. 委托(Delegate)与事件:C# 中的委托类似于 Java 的函数式接口,但委托可以用于事件处理,Java 通过监听器模式实现事件。 在 C# 中,变量是用于存储数据的容器,它们的命名必须遵循一定的规则:首字符可以是...

    C#入门经典 及代码

    作为C++和Java的混合体,C#拥有强大的功能和简洁的语法,使得初学者能够快速上手。"C#入门经典及代码"这套资料旨在帮助初学者掌握C#的基础知识,并通过实际的代码示例加深理解。 首先,学习C#,你需要了解它的基本...

    Java中委托小用法,看了就会

    在Java编程语言中,"委托"(Delegate)的概念源自于其他一些编程语言,如C#或.NET框架。虽然Java没有直接内置的委托类型,但我们可以使用接口和匿名内部类来实现类似的功能。本文将深入探讨如何在Java中实现委托模式...

    c#编程实例100个源码

    同时,C#的枚举(enum)和结构(struct)也是常用的数据类型,它们在实际编程中扮演着重要角色。 异常处理是任何编程语言中必不可少的部分,C#使用try-catch-finally语句块来捕获和处理异常。通过分析源码中的错误...

Global site tag (gtag.js) - Google Analytics