程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#基本之拜托用法實例教程

C#基本之拜托用法實例教程

編輯:C#入門知識

C#基本之拜托用法實例教程。本站提示廣大學習愛好者:(C#基本之拜托用法實例教程)文章只能為提供參考,不一定能成為您想要的結果。以下是C#基本之拜托用法實例教程正文


本文以實例情勢簡略引見了C#中拜托的用法,是深刻進修C#法式設計所必需控制的主要技能。現以教程情勢分享給年夜家供年夜家參考之用。詳細以下:

起首,拜托是C#中最為罕見的內容。與類、列舉、構造、接口一樣,拜托也是一品種型。類是對象的籠統,而拜托則可以算作是函數的籠統。一個拜托代表了具有雷同參數列表和前往值的一切函數。好比:

delegate int GetCalculatedValueDelegate(int x, int y);

在下面的界說中,我們界說了一個拜托,這個拜托代表著一類函數,這些函數的第一個參數是整數型的x,第二個參數是整數型的y,而函數的前往值則是一個整數。在這裡,為了描寫便利,我們把這一類的函數稱為具有雷同簽名(signature)的函數(留意:這個簽名其實不是數字簽名中的概念,而只是表現這類函數具有雷同的參數列表和前往值)。

既然拜托是一品種型,那末它就可以被用來界說參數、變量和前往值。由拜托界說的變量用於保留具有雷同簽名的函數實體。須要留意的是,C#和C++分歧,C++中的函數指針只能保留全局的或許靜態的函數,而C#中的拜托實體則可以指代任何函數。

如今我們來看一個例子,在這個例子中,我們應用了下面界說的誰人拜托,並創立了一個拜托實體,使其指代法式中的AddCalculator函數,接上去便可以直接像應用函數自己一樣,應用這個拜托實體來取得盤算的成果。

delegate int GetCalculatedValueDelegate(int x, int y); 
 
static int AddCalculator(int x, int y) 
{ 
 return x + y; 
} 
 
static int SubCalculator(int x, int y) 
{ 
 return x - y; 
} 
 
static void Main(string[] args) 
{ 
 GetCalculatedValueDelegate d = AddCalculator; 
 Console.WriteLine(d(10, 20)); 
}

到這裡也就可以根本上明確“拜托”的意義了,針對下面的Main函數,原來須要挪用AddCalculator函數的,卻經由過程d來挪用了,也就是,後續對AddCalculator的操作由d代為效力。原來是要小明去先生辦公室拿粉筆盒的,因為小明和小文是好同伙,是以小明就要小文代他去拿,因而小文成了小明的署理,小明拜托小文去拿粉筆盒。

如今我們來斟酌拜托作為參數的情況。將拜托作為參數,可以把函數自己的處置邏輯籠統出來,而讓挪用者決議終究應用甚麼樣的邏輯行止理。請看上面的例子:

delegate int GetCalculatedValueDelegate(int x, int y); 
 
static int AddCalculator(int x, int y) 
{ 
 return x + y; 
}
 
static int SubCalculator(int x, int y) 
{ 
 return x - y; 
} 
 
static int Calculator(GetCalculatedValueDelegate del, int x, int y) 
{ 
 return del(x, y); 
} 
 
static void Main(string[] args) 
{ 
 Console.WriteLine(Calculator(AddCalculator, 10, 20)); 
}

在下面的例子中,Calculator函數的第一個參數就是一個拜托。現實上,Calculator對x和y將會做甚麼處置,它自己其實不曉得,若何處置x和y由GetCalculatedValueDelegate來決議。那末在Main辦法裡,我們將AddCalculator辦法作為參數傳遞給Calculator,表現讓Calculator用AddCalculator的邏輯行止理x和y。這也很抽象:Calculator說:“我不曉得要怎樣處置x和y,讓del行止理好了!”因而就把x和y扔給了del。

這類做法其實跟“模板辦法形式”有點點相似。在模板辦法形式中,可以將可變的部門留給子類去重寫,而將不變的部門由父類完成。那末在拜托作為參數的情形下,Calculator可以本身處置不變的邏輯,而將“詳細怎樣做”的工作拜托給別人去解決。

拜托作為參數,在C#中異常罕見。好比線程的創立,須要給一個ThreadStart或許ParameterizedThreadStart拜托作為參數,而在線程履行的時刻,將這個參數所指代的函數用作線程履行體。再好比:List<T>類型的Find辦法的參數也是一個拜托,它把“怎樣去查找”或許說“怎樣樣才算找到”這個成績留給了開辟人員。開辟人員只須要界說一個參數為T,前往值為布爾型的函數,完成函數體,並將函數作為參數傳給Find辦法,便可以完成聚集中元素的查找。

拜托作為前往值普通會用在“依據分歧情形決議應用分歧的拜托”如許的情況下。這有點像工場形式,不外拜托用作前往值照樣用的沒有效作參數如許頻仍。

與拜托相干的概念還有許多,好比異步驟用、泛型拜托、匿名辦法、Lambda表達式、事宜、協變與逆變等。感興致的讀者可以檢查本站相干文章。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved