當要把方法傳給其他方法時,需要使用委託。委託實現為派生自基類system.multicastdelegate類,system.multicastdelegate類又派生自基類system.delegate.
當前使用場景是資料庫上下文登錄檔時,在底層已註冊框架的基礎資料表,導致業務系統需要傳入dbmodelbuilder類繼續註冊業務資料表。這時暫時不清楚業務系統具體內容,先把action作為引數帶入到註冊入口方法,這裡將展示部分**講述大概思路:
1.程式入口,向上下文登錄檔
}2.底層註冊及委託定義,即db上下文
namespace frameworkbase.dbcontext
/// ///
///
///
protected override void onmodelcreating(dbmodelbuilder modelbuilder)
base.onmodelcreating(modelbuilder);
}/// /// 註冊乙個委託
/// 此委託:向上下文中登錄檔
/// (底層已經註冊過了一部分表)
///
///
public static void partialtbregister(actionac)
}}
defaultdbcontext派生自基類dbcontext,主要實現資料庫上下文註冊內容,先定義委託_ac,註冊了底層資料表,然後在partialtbregister方法中註冊委託,從步驟1的入口處呼叫。
3.業務系統實現其自己的註冊內容。即步驟1:defaultdbcontexttbregister.registe 的實現。
public class defaultdbcontexttbregister
}
以上是委託的運用。
下面借鑑已有知識鞏固下委託的幾種使用方式
在使用 action委託時,不必顯式定義乙個封裝只有乙個引數的方法的委託。以下**顯式宣告了乙個名為 displaymessage 的委託,並將對 writeline 方法或 showwindowsmessage 方法的引用分配給其委託例項。
using system;
using system.windows.forms;
delegate void displaymessage(string message);
public class testcustomdelegate
private static void showwindowsmessage(string message)
}
以下簡化了此**,它所用的方法是例項化 action委託,而不是顯式定義乙個新委託並將命名方法分配給該委託。
using system;
using system.windows.forms;
public class testaction1
private static void showwindowsmessage(string message)
}
也可以將 action委託與匿名方法一起使用。
using system;
using system.windows.forms;
public class testanonmethod
; else
messagetarget = delegate(string s) ;
messagetarget("hello, world!");
}private static void showwindowsmessage(string message)
}
C 基礎之委託
委託常常和事件在一起使用,可以理解委託是方法的容器,事件則是委託的另一種表現形式。委託和事件雖然寫得還比較多,不過也只是用的熟練而已,趁週末沒課好好鞏固下基礎,一點一點積累吧。1.乙個簡單的小例子 class program class people public void eatpear stri...
C 基礎之委託
因為委託也是面試常常問道的問題,分享一下我的理解。為什麼使用委託。delegate void mydelegate 定義委託 mydelegate md 宣告委託 md new mydelegate obj.method 委託的例項化 mymethod d 把引數傳遞給方法 委託把方法當做引數傳到另...
c 之基礎委託非同步
大家知道委託就相當於c 裡面的函式指標,相信大家都很很了解,看看如下簡單 來回想一下委託 public delegate void ad xu xus new xu ad b new ad xus.add b xus.ex b console.readline class xupublic void...