亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

解析C#面向對象編程中方法(method)的使用

2020-01-24 01:18:25
字體:
來源:轉載
供稿:網友

方法是包含一系列語句的代碼塊。程序通過調用該方法并指定任何所需的方法參數使語句得以執行。在 C# 中,每個執行的指令均在方法的上下文中執行。Main 方法是每個 C# 應用程序的入口點,并在啟動程序時由公共語言運行時 (CLR) 調用。
方法簽名
通過指定訪問級別(如 public 或 private)、可選修飾符(如 abstract 或 sealed)、返回值、方法的名稱以及任何方法參數,在類或結構中聲明方法。這些部件一起構成方法的簽名。
注意
出于方法重載的目的,方法的返回類型不是方法簽名的一部分。但是在確定委托和它所指向的方法之間的兼容性時,它是方法簽名的一部分。
方法參數在括號內,并且用逗號分隔??绽ㄌ栔甘痉椒ú恍枰魏螀?。此類包含三種方法:

abstract class Motorcycle{ // Anyone can call this. public void StartEngine() {/* Method statements here */ } // Only derived classes can call this. protected void AddGas(int gallons) { /* Method statements here */ } // Derived classes can override the base class implementation. public virtual int Drive(int miles, int speed) { /* Method statements here */ return 1; } // Derived classes must implement this. public abstract double GetTopSpeed(); }

方法訪問
調用對象上的方法就像訪問字段。在對象名之后添加一個句點、方法名和括號。參數列在括號里,并且用逗號分隔。因此,可在以下示例中調用 Motorcycle 類的方法:

class TestMotorcycle : Motorcycle{ public override double GetTopSpeed() {  return 108.4; } static void Main() {  TestMotorcycle moto = new TestMotorcycle();  moto.StartEngine();  moto.AddGas(15);  moto.Drive(5, 20);  double speed = moto.GetTopSpeed();  Console.WriteLine("My top speed is {0}", speed);    }}

方法參數與參數
該方法定義指定任何所需參數的名稱和類型。調用代碼調用該方法時,它為每個參數提供了稱為參數的具體值。參數必須與參數類型兼容,但調用代碼中使用的參數名(如果有)不需要與方法中定義的參數名相同。例如:

public void Caller(){ int numA = 4; // Call with an int variable. int productA = Square(numA); int numB = 32; // Call with another int variable. int productB = Square(numB); // Call with an integer literal. int productC = Square(12); // Call with an expression that evaulates to int. productC = Square(productA * 3);}int Square(int i){ // Store input argument in a local variable. int input = i; return input * input;}

按引用傳遞與按值傳遞
默認情況下,值類型傳遞給方法時,傳遞的是副本而不是對象本身。因此,對參數的更改不會影響調用方法中的原始副本??梢允褂?ref 關鍵字按引用傳遞值類型。
引用類型的對象傳遞到方法中時,將傳遞對對象的引用。也就是說,該方法接收的不是對象本身,而是指示該對象位置的參數。如果通過使用此引用更改對象的成員,即使是按值傳遞該對象,此更改也會反映在調用方法的參數中。
通過使用 class 關鍵字創建引用類型,如以下示例所示。

public class SampleRefType{ public int value;}

現在,如果將基于此類型的對象傳遞到方法,則將傳遞對對象的引用。下面的示例將 SampleRefType 類型的對象傳遞到 ModifyObject 方法。

public static void TestRefType(){ SampleRefType rt = new SampleRefType(); rt.value = 44; ModifyObject(rt); Console.WriteLine(rt.value);}static void ModifyObject(SampleRefType obj){ obj.value = 33;}

該示例執行的內容實質上與先前示例相同,均按值將參數傳遞到方法。但是因為使用了引用類型,結果有所不同。 ModifyObject 中所做的對形參 obj 的 value 字段的修改,也會更改 TestRefType 方法中實參 rt 的 value 字段。 TestRefType 方法顯示 33 作為輸出。

返回值
方法可以將值返回到調用方。如果列在方法名之前的返回類型不是 void,則該方法可通過使用 return 關鍵字返回值。帶 return 關鍵字,后跟與返回類型匹配的值的語句將該值返回到方法調用方。 return 關鍵字還會停止執行該方法。如果返回類型為 void,沒有值的 return 語句仍可用于停止執行該方法。沒有 return 關鍵字,當方法到達代碼塊結尾時,將停止執行。具有非空的返回類型的方法都需要使用 return 關鍵字來返回值。例如,這兩種方法都使用 return 關鍵字來返回整數:

class SimpleMath{ public int AddTwoNumbers(int number1, int number2) {  return number1 + number2; } public int SquareANumber(int number) {  return number * number; }}

若要使用從方法返回的值,調用方法可以在相同類型的值足夠的地方使用該方法調用本身。也可以將返回值分配給變量。例如,以下兩個代碼示例實現了相同的目標:

(1)

 int result = obj.AddTwoNumbers(1, 2);result = obj.SquareANumber(result);// The result is 9.Console.WriteLine(result);
(2)
result = obj.SquareANumber(obj.AddTwoNumbers(1, 2));// The result is 9.Console.WriteLine(result);

在這種情況下,使用本地變量 result 存儲值是可選的。此步驟可以幫助提高代碼的可讀性,或者如果需要存儲該方法整個范圍內參數的原始值,則此步驟可能很有必要。

異步方法
通過使用異步功能,你可以調用異步方法而無需使用顯式回調,也不需要跨多個方法或 lambda 表達式來手動拆分代碼。Visual Studio 2012 中已引入異步功能。
如果用 async 修飾符標記方法,則可以使用該方法中的 await 運算符。當控件到達異步方法中的 await 表達式時,控件將返回到調用方,并在等待任務完成前,方法中進度將一直處于掛起狀態。任務完成后,可以在方法中恢復執行。
注意
異步方法在遇到第一個尚未完成的 awaited 對象或到達異步方法的末尾時(以先發生者為準),將返回到調用方。
異步方法可以具有 Task<TResult>、Task 或 void 返回類型。Void 返回類型主要用于定義需要 void 返回類型的事件處理程序。無法等待返回 void 的異步方法,并且返回 void 方法的調用方無法捕獲該方法引發的異常。
在以下示例中,DelayAsync 是具有 Task<TResult> 返回類型的異步方法。 DelayAsync 具有返回整數的 return 語句。因此,DelayAsync 的方法聲明必須具有 Task<int> 的返回類型。因為返回類型是 Task<int>,DoSomethingAsync 中 await 表達式的計算如以下語句所示得出整數:

int result = await delayTask


startButton_Click 方法是具有 void 返回類型的異步方法的示例。因為 DoSomethingAsync 是異步方法,調用 DoSomethingAsync 的任務必須等待,如以下語句所示:await DoSomethingAsync();。 startButton_Click 方法必須使用 async 修飾符進行定義,因為該方法具有 await 表達式。

// using System.Diagnostics;// using System.Threading.Tasks;// This Click event is marked with the async modifier.private async void startButton_Click(object sender, RoutedEventArgs e){ await DoSomethingAsync();}private async Task DoSomethingAsync(){ Task<int> delayTask = DelayAsync(); int result = await delayTask; // The previous two statements may be combined into // the following statement. //int result = await DelayAsync(); Debug.WriteLine("Result: " + result);}private async Task<int> DelayAsync(){ await Task.Delay(100); return 5;}

輸出: 

 

Result: 5

異步方法不能聲明任何 ref 或 out 參數,但是可以調用具有這類參數的方法。


表達式主體定義
具有立即僅返回表達式結果,或單個語句作為方法主題的方法定義很常見。以下是使用 => 定義此類方法的語法快捷方式:

public Point Move(int dx, int dy) => new Point(x + dx, y + dy); public void Print() => Console.WriteLine(First + " " + Last);// Works with operators, properties, and indexers too.public static Complex operator +(Complex a, Complex b) => a.Add(b);public string Name => First + " " + Last; public Customer this[long id] => store.LookupCustomer(id);

如果該方法返回 void 或是異步方法,則該方法的主體必須是語句表達式(與 lambda 相同)。對于屬性和索引器,兩者必須是只讀,并且不使用 get 訪問器關鍵字。
迭代器
迭代器對集合執行自定義迭代,如列表或數組。迭代器使用 yield return 語句返回元素,每次返回一個。當 yield return 語句到達時,將記住當前在代碼中的位置。下次調用迭代器時,將從該位置重新開始執行。
通過使用 foreach 語句從客戶端代碼調用迭代器。
迭代器的返回類型可以是 IEnumerable、IEnumerable<T>、IEnumerator 或 IEnumerator<T>。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品一区久久久久| 欧美成人国产va精品日本一级| 国产ts一区二区| 午夜精品福利电影| 富二代精品短视频| 精品亚洲精品福利线在观看| 亚洲人成人99网站| 欧美精品videosex性欧美| 日日狠狠久久偷偷四色综合免费| 91影院在线免费观看视频| 最近免费中文字幕视频2019| 成人免费高清完整版在线观看| 欧美综合国产精品久久丁香| 日韩精品中文字幕在线观看| 国产精品第七十二页| 神马久久久久久| 日本精品视频网站| 国产精品久久久91| 97在线看免费观看视频在线观看| 日韩亚洲精品电影| 亚洲精品suv精品一区二区| 色综合老司机第九色激情| 亚洲成人精品视频在线观看| 久久久久久久久电影| 久久亚洲一区二区三区四区五区高| 亚洲a一级视频| 九九久久综合网站| 久久久人成影片一区二区三区观看| 日韩免费视频在线观看| 久久影视电视剧凤归四时歌| 亚洲国产成人精品女人久久久| 日韩成人小视频| 久久91亚洲精品中文字幕| 日韩av电影国产| 色樱桃影院亚洲精品影院| 久久久精品一区二区三区| 国产精品白丝av嫩草影院| 久久久成人的性感天堂| 日本久久精品视频| 欧美激情aaaa| 欧美国产日韩一区二区| 亚洲精品福利视频| 亚洲国产精品热久久| 国产成人福利网站| 最近2019年手机中文字幕| 久热精品视频在线免费观看| 欧美日本中文字幕| 欧美激情在线视频二区| 北条麻妃一区二区在线观看| 亚洲国产精品99| 亚洲电影免费观看高清完整版在线| 91精品国产91久久久久久不卡| 97国产精品免费视频| 精品视频在线播放免| 国产69精品久久久久久| 日韩精品日韩在线观看| 好吊成人免视频| 亚洲xxxx妇黄裸体| 欧美日韩在线视频首页| 亚洲精品美女在线| 亚洲国产精品久久久久秋霞蜜臀| 国产精品久久久久免费a∨| 欧美成人激情在线| 欧美一区二区大胆人体摄影专业网站| 久久久久久有精品国产| 国产欧美日韩中文字幕在线| 成人在线观看视频网站| 久久999免费视频| 国产98色在线| 国产成人+综合亚洲+天堂| 亚洲日本中文字幕免费在线不卡| 国产精品久久久久久亚洲调教| 欧美激情免费视频| 国产精品丝袜视频| 另类专区欧美制服同性| 国产精品旅馆在线| 91久久精品国产91久久性色| 国产自产女人91一区在线观看| 亚洲18私人小影院| 欧美大片免费观看在线观看网站推荐| 欧美壮男野外gaytube| 伊人男人综合视频网| 综合av色偷偷网| 成人国内精品久久久久一区| 92看片淫黄大片欧美看国产片| 日韩欧美在线免费| 欧美日韩免费观看中文| 国产美女高潮久久白浆| 亚洲欧美国产视频| 亚洲乱码av中文一区二区| 亚洲电影av在线| 亚洲欧美日韩精品久久奇米色影视| 国模叶桐国产精品一区| 97人洗澡人人免费公开视频碰碰碰| 91精品国产高清久久久久久| 欧美国产日韩一区二区在线观看| 狠狠色狠色综合曰曰| 97视频在线观看视频免费视频| 欧美中文字幕视频| 一区二区三区视频在线| 欧美成人精品在线视频| 亚洲国产成人久久| 精品美女永久免费视频| 在线亚洲午夜片av大片| 国产精品揄拍一区二区| 欧美午夜激情小视频| 成人深夜直播免费观看| 北条麻妃久久精品| 成人免费在线网址| 中文字幕日本精品| 97成人在线视频| 超碰日本道色综合久久综合| 久久久久久有精品国产| 国产成人精品最新| 日韩中文综合网| 欧美高清视频在线观看| 国产丝袜高跟一区| 午夜精品久久久久久99热| 亚洲永久在线观看| 91精品久久久久久久久中文字幕| 午夜精品一区二区三区在线| 亚洲天堂男人的天堂| 国产精品久久久久久久久免费| 精品中文字幕在线观看| 日韩欧美a级成人黄色| 中文字幕欧美国内| 精品无码久久久久久国产| 亚洲毛片在线观看| 日韩一区二区三区在线播放| 日韩精品中文字幕有码专区| 国产精品稀缺呦系列在线| 一区三区二区视频| 亚洲欧美色婷婷| 久久夜色精品亚洲噜噜国产mv| 亚洲午夜av电影| 色哟哟入口国产精品| 亚洲欧美在线x视频| 97热在线精品视频在线观看| 亚洲经典中文字幕| 日韩成人在线免费观看| 国产aaa精品| 91久久久久久久| 午夜免费日韩视频| 亚洲一级一级97网| 国产成人97精品免费看片| 中文字幕在线看视频国产欧美在线看完整| 欧美一级黑人aaaaaaa做受| 日韩中文字在线| 98午夜经典影视| 国产丝袜精品第一页| xvideos国产精品| 精品国产成人av| 国产一级揄自揄精品视频| 欧美与黑人午夜性猛交久久久| 国产69精品久久久| 国产亚洲精品久久久优势| 亚洲欧洲中文天堂| 一本久久综合亚洲鲁鲁| 成人中心免费视频| 欧美怡红院视频一区二区三区| 欧美午夜美女看片| 亚洲另类激情图| 91在线免费视频| 狠狠躁夜夜躁人人爽天天天天97|