c#委託與java處理
有兩個物件參與處理同一個請求,接受請求的物件將請求委託給另一個物件來處理。“委託”在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
GreetingDelegate delegate1= new GreetingDelegate(EnglishGreeting);
delegate1 += ChineseGreeting; // 給此委託變數再繫結一個方法
// 將先後呼叫 EnglishGreeting與 ChineseGreeting方法 GreetPeople("Geogre", delegate1);
Console.WriteLine(); delegate1 -= EnglishGreeting;//取消對EnglishGreeting方法的繫結 //
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#.NET與Java/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++ STL與java 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 與c# 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