C#中迭代器和分部類的使用
迭代器在集合類中經(jīng)常使用,而分部類則提供了一種將一個(gè)類分成多個(gè)類的方法,這對(duì)于有大量代碼的類非常實(shí)用。
一、迭代器
迭代器是可以返回相同類型的值的有序序列的一段代碼,可用作方法、運(yùn)算符或get訪問(wèn)器的代碼體。迭代器代碼使用yield return語(yǔ)句依次返回每個(gè)元素,yield break語(yǔ)句將終止迭代??梢栽陬愔袑?shí)現(xiàn)多個(gè)迭代器,每個(gè)迭代器都必須像任何類成員一樣有唯一的名稱,并且可以在foreach語(yǔ)句中被客戶端代碼調(diào)用。迭代器的返回類型必須為IEnumerable或IEnumerator中的任意一種。
創(chuàng)建迭代器最常用的方法是對(duì)IEnumerator接口實(shí)現(xiàn)GetEnumerator()方法。
1.示例源碼
示例迭代器的用法:Windows應(yīng)用創(chuàng)建一個(gè)名為Family的類并繼承IEnumerable接口,對(duì) IEnumerator接口實(shí)現(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 = "測(cè)試迭代器";
Family myfamily = new(); //實(shí)例化Family
foreach (string str in myfamily) //遍歷輸出myfamily
{
richTextBox1.Text += str + "\n";
}
}
/// <summary>
/// 創(chuàng)建一個(gè)名為Family的類,其繼承IEnumerable接口,
/// 該接口公開(kāi)枚舉數(shù),該枚舉數(shù)支持在非泛型集合上進(jìn)行簡(jiǎn)單迭代。
/// 對(duì)IEnumerator接口實(shí)現(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]; //迭代器返回?cái)?shù)組元素
}
}
}
}
}
2.生成效果:

請(qǐng)讀者思考一下:迭代器的返回值去了哪里?Form1_Load事件是如何獲得數(shù)據(jù)的呢?這個(gè)問(wèn)題的答案才是迭代器知識(shí)點(diǎn)的精華。
二、分部類
分部類使程序的結(jié)構(gòu)更加合理,代碼的組織更加緊密??梢詫㈩悺⒔Y(jié)構(gòu)或接口的定義拆分到兩個(gè)或多個(gè)源文件中。每個(gè)源文件包含類定義的一部分,編譯應(yīng)用程序時(shí),VS會(huì)把所有部分組合起來(lái),這樣的類被稱為分部類。
分部類主要應(yīng)用在以下方面:
- 當(dāng)項(xiàng)目比較龐大時(shí),使用分部類可以拆分一個(gè)類至幾個(gè)文件中,這樣的處理可以使不同的開(kāi)發(fā)人員同時(shí)進(jìn)行工 作,避免了效率的低下。
- 使用自動(dòng)生成的源時(shí),無(wú)須重新創(chuàng)建源文件即可將代碼添加到類中。VS在創(chuàng)建Windows窗體和Web服務(wù)包裝代碼等 時(shí)都使用此方法。開(kāi)發(fā)人員無(wú)須編輯VS所創(chuàng)建的文件,即可創(chuàng)建使用這些類的代碼。
定義分部類時(shí)需要使用partial關(guān)鍵字,分部類的每個(gè)部分都必須包含一個(gè)partial關(guān)鍵字,并且其聲明必須與其他部分位于同一命名空間。開(kāi)發(fā)分部類時(shí),要成為同一類型的各個(gè)部分的所有分部類型定義都必須在同一程序集或同一模塊(.exe或.dll文件)中進(jìn)行定義,分部類定義不能跨越多個(gè)模塊。
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#中嵌入SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
本文給大家介紹的是C#中嵌入SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單方法,十分的方便也很實(shí)用,有需要的小伙伴可以參考下。2015-06-06
使用Http Head方法獲取文件長(zhǎng)度的實(shí)現(xiàn)方法詳解
本篇文章是對(duì)使用Http Head方法獲取文件長(zhǎng)度的實(shí)現(xiàn)方法進(jìn)行詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C# string轉(zhuǎn)unicode字符的實(shí)現(xiàn)
本文主要介紹了C# string轉(zhuǎn)unicode字符的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
C#使用post發(fā)送和接收數(shù)據(jù)的方法
這篇文章主要介紹了C#使用post發(fā)送和接收數(shù)據(jù)的方法,涉及C#使用post收發(fā)數(shù)據(jù)的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
C#使用Stack類進(jìn)行堆棧設(shè)計(jì)詳解
C#中的堆棧由System.Collections.Generic命名空間中的Stack類定義,那么下面就跟隨小編一起學(xué)習(xí)一下C#如何Stack類進(jìn)行堆棧設(shè)計(jì)吧2024-03-03

