需求:根據傳入的action引數,自動構造與之對應的request。
直接上**。
先定義乙個myrequest類。下有子類:addrequest,loadrequest,deleterequest。
myrequest
1myrequest定義了乙個虛方法 msg();public
class
myrequest24
//public gridpagerparams pager 56
public
myrequest()710
public
virtual
string
msg()
1114
}
各個子類由於演算法不同,可重寫該方法。
下面是關鍵:myrequestcreator
myrequestcreator 負責判斷引數action,並返回相應的 request.
myrequestcreator
public客戶端呼叫時:class
myrequestcreator
));_creatordict.add(
"add",
newmyrequestcreator._newmytype(
delegate
() ));
//_creatordict.add(
"delete",
newmyrequestcreator._newmytype(
delegate
() ));
}public
static
myrequest createhandler(
string
action)
catch
(exception e)
}return
null;}
}
myrequest request = myrequestcreator.createhandler("load");
這樣就可以生成myrequest的具體子類,並以myrequest方式使用它的功能。
整個過程完全沒有if或者case,配合emit還可以實現動態增加myrequest的子類並註冊到myrequestcreator中去。
更重要的是,使用這種方式,比根據activator.createinstance(typeof(myrequest));產生的物件要快的多,接近於直接使用new object()的方式。
C 委託 應用例項
用一句話解釋委託 委託是一種可以把引用儲存為函式的型別。有些類似spring框架對於介面的用法,向action中注入service物件。action並不知道呼叫哪個服務層,只有容器通過配置檔案 向action注入service物件後,action才能知道呼叫的是哪個實現的服務層物件。你傳入的是那個實...
委託例項(delegate例項 事件委託通知)
delegate例項 delegate是c 中的一種型別,它實際上是乙個能夠持有對某個方法的引用的類。與其它的類不同,delegate類能夠擁有乙個簽名 signature 並且它只能持有與它的簽名相匹配的方法的引用。它所實現的功能與c c 中的函式指標十分相似。它允許你傳遞乙個類a的方法m 給另乙...
委託例項化
新建立的委託例項將引用以下各項中的乙個 委託建立表示式中引用的靜態方法。委託建立表示式中引用的目標物件 此物件不能為null 和例項方法。另乙個委託。例如 delegate void d int x class c public void m2 int i class test 委託例項一旦被例項化...