1. 程式人生 > >c#委託與java處理

c#委託與java處理

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------

有兩個物件參與處理同一個請求,接受請求的物件將請求委託給另一個物件來處理。“委託”在C#中是一個語言級特性,是C#語言的動態拓展能力。而在Java語言中沒有直接的對應,但是我們可以通過動態代理來實現委託

   (一)  C#下委託代理方式:

/**將方法作為方法的引數

*/

  publicdelegatevoidGreetingDelegate(string name);

      private static voidChineseGreeting(string name)

 private static voidEnglishGreeting(string name)

   private static void GreetPeople(string name,GreetingDelegate MakeGreeting) {
              MakeGreeting(name);
            }

static void Main(string[] args) {
              GreetPeople("Geogre ", EnglishGreeting);
              GreetPeople("陌上桑", ChineseGreeting);

}

 /***將方法繫結到委託

*/

static void Main(string

[]args) {
    GreetingDelegate delegate1= new GreetingDelegate(EnglishGreeting);
    delegate1 += ChineseGreeting;   // 給此委託變數再繫結一個方法   

// 將先後呼叫 EnglishGreeting ChineseGreeting方法    GreetPeople("Geogre", delegate1); 
    Console.WriteLine();   delegate1 -= EnglishGreeting;//取消對EnglishGreeting方法的繫結    //

將僅呼叫 ChineseGreeting
    GreetPeople("陌上桑", delegate1);
    Console.ReadKey();
}
輸出為:
Morning, Geogre
早上好, Geogre
早上好, 陌上桑

(二) Java下動態代理來實現委託

public abstract class Delegator implementsInvocationHandler {
protected Object obj_orgin = null; //原始物件

protected Object obj_proxy = null; //代理物件

// 完成原始物件和委託物件的例項化
 public  Delegator(Objectorgin) {
        this.createProxy(orgin);
    }

protected Object createProxy(Object orgin) {
        obj_orgin = orgin;

//下面語句中orgin.getClass().getClassLoader()為載入器, orgin.getClass().getInterfaces()為介面集class物件
        obj_proxy = Proxy.newProxyInstance(orgin.getClass().getClassLoader(),orgin.getClass().getInterfaces(), this);//委託
        return obj_proxy;
    }

/*
     * 對帶有指定引數的指定物件呼叫由此 Method 物件表示的底層方法,具體請參見
     */
    protected Object invokeSuper(Methodmethod, Object[] args) throws Throwable {
        return method.invoke(obj_orgin,args);
    }
//--------------實現InvocationHandler介面,要求覆蓋------------
    //下面實現的方法是當委託的類呼叫toString()方法時,操作其他方法而不是該類預設的toString(),這個類的其他方法則不會。

    public Object invoke(Object obj,Method method, Object[] args) throws Throwable {
        // 預設實現:委託給obj_orgin完成對應的操作
        if(method.getName().equals("toString")) {

//對其做額外處理
            returnthis.invokeSuper(method, args) + "$Proxy";
        } else {

//注意,呼叫原始物件的方法,而不是代理的(obj==obj_proxy

           return this.invokeSuper(method, args);
        }
    }
}


                                                                                        (    --------     整理相關資源,若有版權問題,請及時溝通)

相關推薦

c#委託java處理

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! ------- 有兩個物件參與處理同一個請求,接受請求的物件將請求委託給另一個物件來處理。“委託”在C#中是一個語言級特性,是C#語言的動態拓展能力。而在Java語言中沒有直接的對應

C#中的委託Java中的介面回撥

  最近因為業務需求學習起了C#,對於學過Java的人來說,C#其實還是挺好懂的,基本上很多語法都是相通的。今天就談談我對C#和Java中不同的地方的理解吧。   說到Java中的介面回撥那麼就不得不提觀察者設計模式,所謂觀察者模式就是A(觀察者 Observ

C# HmacSha512 java HmacSha512 加密

replace query generator arr .get ray oba secretkey lower C# HmacSha512 與 java HmacSha512 加密。 /// <summary> /// HmacSha512

C# AESCBC256 java AESCBC256 加解密

created key rom post base bsp return block padding 和某上市公司對接接口,他們試用 java AES CBC PKCS5 256 加解密。網上C# 基本不合適。 註意:C# PKCS7 對應 java PKCS5 ///

C# is java instanceof 作用相同

alt bject blog 代碼 article source -m board tracking c#中 is 檢查對象是否與給定類型兼容。 例如,下面的代碼可以確定對象是否為 MyObject 類型的一個實例,或者對象是否為從 MyObject 派生的一個類型:

MD5+DES在C#.NETJava/Android中的加解密使用

main 模式 NPU ++ 代碼 加密、解密 ets 推薦 lock 一、背景後臺(C#.NET)使用一個MD5+DES的加解密算法,查了下,很多網友都使用了這個算法。在Android裏,也需要這個算法,如何把這個加解密算法切換成Java版,成了難題。畢竟好久沒涉及到這一

c指標 java引用

c 指標示例: #include <stdio.h> int test(int *p); int main(){ int a = 1; int *p = &a; test(p); printf("a = %d\n", a); r

C#委託事件學習筆記

委託事件學習筆記 本文是學習委託和事件的筆記,水平有限,如有錯漏之處,還望大神不吝賜教。 什麼是委託?從字面意思來解釋,就是把一個動作交給別人去執行。在實際開發中最常用的就是使一個方法可以當做一個引數傳遞,以便在方法中可以根據實際情況實現不同的功能。 什麼是事件?事件就是發生的事情,例如點選了一

Unity之C#——委託事件,觀察者模式,貓和老鼠事例

委託與事件,觀察者模式,貓和老鼠事例     在Unity遊戲開發中,我們經常需要在一個類中,呼叫另一個類中的方法,比如,當玩家進入到某個地方,敵人就開始攻擊玩家。這時就需要利用委託與事件,設計觀察者模式。 此處我們利用貓和老鼠來簡單描述: 程式碼如下: Ca

C#委託事件之----委託

C#委託與事件之委託 整理了一下委託的幾種使用方法,都在程式碼裡面了 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst

大白話系列之C#委託事件講解(一)

從序言中,大家應該對委託和事件的重要性有點了解了吧,雖然說我們現在還是能模糊,但是從我的大白話系列中,我會把這些概念說的通俗易懂的。首先,我們還是先說說委託吧,從字面上理解,只要是中國人應該都知道這個意思,除非委託2箇中文字不認識,舉個例子,小明委託小張去買車票。    &nbs

大白話系列之C#委託事件講解大結局

今天是大白話系列之C#委託與事件講解的大結局,也是我們最關心的,在日常的MES系統程式設計中到底怎樣使用這樣的利器,其實我們每天都在使用事件,一個窗體,一個按鈕都包含這事件,只是很少用到自己寫的委託和事件,說白了不知道如何下手,也不知道在什麼樣的場景下應用。 用到事件的地方有很多,這次講解就ME

大白話系列之C#委託事件講解(二)

什麼是事件?EVENT?點選事件?載入事件?一連串的模糊的概念衝擊著我們弱小的腦袋 那我們首先來看一下比較正統的感念吧: 事件是類在發生其關注的事情時用來提供通知的一種方式。 事件的發生一般都牽扯2個角色 事件發行者(Publisher):一個事件的發行者,也稱作是傳送者(sende

資料結構演算法(3)- C++ STLjava se中的vector

宣告:雖然本系列部落格與具體的程式語言無關。但是本文作者對c++相對比較熟悉,其次是java,所以難免會有視角上的偏差。舉例也大多是和這兩門語言相關。 上一篇部落格概念性的介紹了vector,我們有了大致的印象:vector不過就是看上去可以自增長的陣列麼。這篇部落格將稍微

C語言java語言中資料型別的差別總結

在學習java的時候,看到char ch =  '男' ;我就覺得很奇怪,char型別不是佔用一個位元組嗎?為什麼定義成一個漢字被說成是一個字元了?原來,在C語言中,char在32位作業系統下佔用1個位

c作圖圖形處理(輸出正弦曲線)

(6)為了使用方便,本軟體中的graphic.lib中已經集成了EGAVGA顯示驅動程式和trip、     litt、goth、sans四種英文字型的驅動,使用該graphic.lib編譯連線成的exe檔案可獨立執行,     不需要機器上有EGAVGA驅動程式,也不需要有四種字型的驅動,但需要在源程式中i

[C#] 委託方法組

在編寫委託相關程式碼,尤其是泛型委託相關程式碼的時候,經常會遇到下面這種問題: 定義一個委託型別: public delegate void TestDelegate<T>(T arg); 定義一個測試用的類,及方法: public class Tes

C# 委託delege的處理

--- 需要發生觸發事件的頁面  public delegate void ShowHandle(string args);  // 定義委託帶引數的  public event ShowHandle ShowList;    // 宣告委託事件方法   // 儲存編輯按鈕事件        private

atitit.js&#160;c#&#160;java交互html5化的原理總結.doc

pad 托管 works onclick rgb sar com 2.0 swing atitit.js 與c# java交互html5化的原理與總結.doc 1. 實現html5化界面的要解決的策略 1 1.1. Js交互 1 1.2. 動態參數個

Java中的異常錯誤處理

ror sys lse AC alt xtend tro ima onu 編譯型異常和運行時異常 編譯時異常是指程序正確 而由外界條件不滿足而產生的異常 java 中要求必須去捕捉住這類異常 不然無法通過編譯 運行時異常是指程序存在著bug