c 基礎之Action T 委託

2021-10-09 17:19:57 字數 1884 閱讀 4661

當要把方法傳給其他方法時,需要使用委託。委託實現為派生自基類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...