C#中迭代器和分部類的使用
迭代器在集合類中經(jīng)常使用,而分部類則提供了一種將一個類分成多個類的方法,這對于有大量代碼的類非常實用。
一、迭代器
迭代器是可以返回相同類型的值的有序序列的一段代碼,可用作方法、運(yùn)算符或get訪問器的代碼體。迭代器代碼使用yield return語句依次返回每個元素,yield break語句將終止迭代。可以在類中實現(xiàn)多個迭代器,每個迭代器都必須像任何類成員一樣有唯一的名稱,并且可以在foreach語句中被客戶端代碼調(diào)用。迭代器的返回類型必須為IEnumerable或IEnumerator中的任意一種。
創(chuàng)建迭代器最常用的方法是對IEnumerator接口實現(xiàn)GetEnumerator()方法。
1.示例源碼
示例迭代器的用法:Windows應(yīng)用創(chuàng)建一個名為Family的類并繼承IEnumerable接口,對 IEnumerator接口實現(xiàn)GetEnumerator()方法創(chuàng)建迭代器。最后遍歷輸出Family類中的內(nèi)容。
//迭代器 using System.Collections; namespace _01 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { groupBox1.Text = "測試迭代器"; Family myfamily = new(); //實例化Family foreach (string str in myfamily) //遍歷輸出myfamily { richTextBox1.Text += str + "\n"; } } /// <summary> /// 創(chuàng)建一個名為Family的類,其繼承IEnumerable接口, /// 該接口公開枚舉數(shù),該枚舉數(shù)支持在非泛型集合上進(jìn)行簡單迭代。 /// 對IEnumerator接口實現(xiàn)GetEnumerator()方法創(chuàng)建迭代器 /// </summary> public class Family : IEnumerable { readonly string[] MyFamily = { "父親", "母親", "弟弟", "妹妹" }; public IEnumerator GetEnumerator() { for (int i = 0; i < MyFamily.Length; i++) { yield return MyFamily[i]; //迭代器返回數(shù)組元素 } } } } }
2.生成效果:
請讀者思考一下:迭代器的返回值去了哪里?Form1_Load事件是如何獲得數(shù)據(jù)的呢?這個問題的答案才是迭代器知識點的精華。
二、分部類
分部類使程序的結(jié)構(gòu)更加合理,代碼的組織更加緊密??梢詫㈩?、結(jié)構(gòu)或接口的定義拆分到兩個或多個源文件中。每個源文件包含類定義的一部分,編譯應(yīng)用程序時,VS會把所有部分組合起來,這樣的類被稱為分部類。
分部類主要應(yīng)用在以下方面:
- 當(dāng)項目比較龐大時,使用分部類可以拆分一個類至幾個文件中,這樣的處理可以使不同的開發(fā)人員同時進(jìn)行工 作,避免了效率的低下。
- 使用自動生成的源時,無須重新創(chuàng)建源文件即可將代碼添加到類中。VS在創(chuàng)建Windows窗體和Web服務(wù)包裝代碼等 時都使用此方法。開發(fā)人員無須編輯VS所創(chuàng)建的文件,即可創(chuàng)建使用這些類的代碼。
定義分部類時需要使用partial關(guān)鍵字,分部類的每個部分都必須包含一個partial關(guān)鍵字,并且其聲明必須與其他部分位于同一命名空間。開發(fā)分部類時,要成為同一類型的各個部分的所有分部類型定義都必須在同一程序集或同一模塊(.exe或.dll文件)中進(jìn)行定義,分部類定義不能跨越多個模塊。
1.示例源碼
//分部類 namespace _02 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { groupBox1.Text = "四則運(yùn)算:"; button1.Text = "等于"; label1.Text= "運(yùn)算結(jié)果:"; label1.AutoSize = true; button1.Size = new Size(65, 23); textBox1.Size = new Size(75, 23); textBox2.Size = new Size(70, 23); textBox3.Size = new Size(205, 23); comboBox1.Size = new Size(35, 23); comboBox1.Items.AddRange(["加", "減", "乘", "除"]); comboBox1.SelectedIndex = 0; comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; } private void Button1_Click(object sender, EventArgs e) { try { Account at = new(); int M = int.Parse(textBox1.Text.Trim()); //操作數(shù)1 int N = int.Parse(textBox2.Text.Trim()); //操作數(shù)2 string str = comboBox1.Text; switch (str) { case "加": textBox3.Text = Account.Addition(M, N).ToString(); break; case "減": textBox3.Text = Account.Subtration(M, N).ToString(); break; case "乘": textBox3.Text = Account.Multiplication(M, N).ToString(); break; case "除": textBox3.Text = Account.Division(M, N).ToString(); break; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } #region 加減乘除 partial class Account //分部類第1部分 { public static int Addition(int a, int b) { return (a + b); //加法 } } partial class Account //分部類第2部分 { public static int Multiplication(int a, int b) { return (a * b); //乘法 } } partial class Account //分部類第3部分 { public static int Subtration(int a, int b) { return (a - b); //減法 } } partial class Account //分部類第4部分 { public static double Division(int a, int b) { return ((double)a / b); //除法 } } #endregion 加減乘除 } }
2.生成效果
到此這篇關(guān)于C#中迭代器和分部類的使用的文章就介紹到這了,更多相關(guān)C# 迭代器和分部類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析C#中斷言與異常的應(yīng)用方式及異常處理的流程控制
這篇文章主要介紹了C#中斷言與異常的應(yīng)用方式及異常處理的流程控制,一般來說斷言用于修正程序員自己的錯誤而異常用于應(yīng)對程序運(yùn)行過程中可能出現(xiàn)的錯誤,需要的朋友可以參考下2016-01-01C#使用NPOI實現(xiàn)Excel導(dǎo)入導(dǎo)出功能
這篇文章主要為大家詳細(xì)介紹了C#使用NPOI實現(xiàn)Excel導(dǎo)入導(dǎo)出功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02asp.net core項目mvc權(quán)限控制:分配權(quán)限
學(xué)習(xí)的最好方法就是動手去做,這里以開發(fā)一個普通的權(quán)限管理系統(tǒng)的方式來從零體驗和學(xué)習(xí)Asp.net Core。項目的整體規(guī)劃大致如下2017-02-02Visual Studio 未能加載各種Package包的解決方案
打開Visual Studio 的時候,總提示未能加載相應(yīng)的Package包,有時候還無法打開項目,各種錯誤提示,怎么解決呢?下面小編給大家?guī)砹薞isual Studio 未能加載各種Package包的解決方案,一起看看吧2016-10-10vista和win7在windows服務(wù)中交互桌面權(quán)限問題解決方法:穿透Session 0 隔離
服務(wù)(Service)對于大家來說一定不會陌生,它是Windows 操作系統(tǒng)重要的組成部分。我們可以把服務(wù)想像成一種特殊的應(yīng)用程序,它隨系統(tǒng)的“開啟~關(guān)閉”而“開始~停止”其工作內(nèi)容,在這期間無需任何用戶參與2016-04-04