C#中的迭代器和分部类

目录

一、迭代器

1.示例源码

2.生成效果:

二、分部类

1.示例源码

2.生成效果


        迭代器在集合类中经常使用,而分部类则提供了一种将一个类分成多个类的方法,这对于有大量代码的类非常实用。

一、迭代器

        迭代器是可以返回相同类型的值的有序序列的一段代码,可用作方法、运算符或get访问器的代码体。迭代器代码使用yield return语句依次返回每个元素,yield break语句将终止迭代。可以在类中实现多个迭代器,每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在foreach语句中被客户端代码调用。迭代器的返回类型必须为IEnumerableIEnumerator中的任意一种。 

        创建迭代器最常用的方法是对IEnumerator接口实现GetEnumerator()方法。

1.示例源码

         示例迭代器的用法:Windows应用创建一个名为Family的类并继承IEnumerable接口,对 IEnumerator接口实现GetEnumerator()方法创建迭代器。最后遍历输出Family类中的内容。

//迭代器
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();            //实例化Familyforeach (string str in myfamily)    //遍历输出myfamily{richTextBox1.Text += str + "\n";}}/// <summary>/// 创建一个名为Family的类,其继承IEnumerable接口,/// 该接口公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。/// 对IEnumerator接口实现GetEnumerator()方法创建迭代器/// </summary>public class Family : IEnumerable{readonly string[] MyFamily = { "父亲", "母亲", "弟弟", "妹妹" };public IEnumerator GetEnumerator(){for (int i = 0; i < MyFamily.Length; i++){yield return MyFamily[i];   //迭代器返回数组元素}}}}
}

2.生成效果:

 

        请读者思考一下:迭代器的返回值去了哪里?Form1_Load事件是如何获得数据的呢?这个问题的答案才是迭代器知识点的精华。

二、分部类

        分部类使程序的结构更加合理,代码的组织更加紧密。可以将类、结构或接口的定义拆分到两个或多个源文件中。每个源文件包含类定义的一部分,编译应用程序时,VS会把所有部分组合起来,这样的类被称为分部类。

 分部类主要应用在以下方面:
*当项目比较庞大时,使用分部类可以拆分一个类至几个文件中,这样的处理可以使不同的开发人员同时进行工 作,避免了效率的低下。
*使用自动生成的源时,无须重新创建源文件即可将代码添加到类中。VS在创建Windows窗体和Web服务包装代码等 时都使用此方法。开发人员无须编辑VS所创建的文件,即可创建使用这些类的代码。

        定义分部类时需要使用partial关键字,分部类的每个部分都必须包含一个partial关键字,并且其声明必须与其他部分位于同一命名空间。开发分部类时,要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集或同一模块(.exe.dll文件)中进行定义,分部类定义不能跨越多个模块。

1.示例源码

//分部类
namespace _02
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){groupBox1.Text = "四则运算:";button1.Text = "等于";label1.Text= "运算结果:";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());    //操作数1int N = int.Parse(textBox2.Text.Trim());    //操作数2string 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.生成效果

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode216. Combination Sum III

文章目录 一、题目二、题解 一、题目 Find all valid combinations of k numbers that sum up to n such that the following conditions are true: Only numbers 1 through 9 are used. Each number is used at most once. Return a list of all possible valid combination…

《微信小程序开发从入门到实战》学习二十五

3.3 开发创建投票页面 3.3.13 使用页面路径参数 写了很多重复代码&#xff0c;现在想办法将多选和单选投票页面合二为一。 将单选页面改造作为单选多选共同页面。 修改index.js中的代码&#xff0c;将路径都跳转到第一个单选页面&#xff0c;带上单选或多选的标志&#xff…

阿里云 E-MapReduce 全面开启 Serverless 时代

作者&#xff1a;李钰 - 阿里云资深技术专家、EMR 负责人 EMR 2.0 平台 阿里云正式发布云原生开源大数据平台EMR 2.0已历经一年时间&#xff0c;如今EMR 2.0全新平台在生产上已经全面落地&#xff0c;资源占比超过60%。EMR 2.0平台之所以在生产上这么快落地&#xff0c;源于其…

EPT-Net:用于3D医学图像分割的边缘感知转换器

EPT-Net: Edge Perception Transformer for 3D Medical Image Segmentation EPT-Net&#xff1a;用于3D医学图像分割的边缘感知转换器背景贡献实验方法Dual Positional Transformer&#xff08;双位置Transformer&#xff09;Learnable Patch EmbeddingVoxel Spacial Positiona…

【2023 云栖】阿里云刘一鸣:Data+AI 时代大数据平台建设的思考与发布

云布道师 本文根据 2023 云栖大会演讲实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;刘一鸣 | 阿里云自研大数据产品负责人 演讲主题&#xff1a;DataAI 时代大数据平台应该如何建设 今天分享的主题是 DataAI 时代大数据平台应该如何建设&#xff0…

org.Hs.eg.db使用--持续修改

org.Hs.eg.db使用–持续修改 加载 library(org.Hs.eg.db)1 基本信息查询 1.1 display the columns columns(org.Hs.eg.db) [1] "ACCNUM" "ALIAS" "ENSEMBL" "ENSEMBLPROT" "ENSEMBLTRANS" "ENT…

C#中抽象类、抽象方法和接口暨内联临时变量的精彩表达

目录 一、抽象类 1.示例 二、抽象方法 三、接口 1.示例 2.内联表达治愈警告CA1859 &#xff08;1&#xff09;传统程序书写源码 &#xff08;2&#xff09;内联后的源码 四、多重继承 1.示例 五、显式接口成员实现 1.示例 六、总结 赠人玫瑰&#xff0c;手有余香&…

梅见们要靠“年轻化”突围,但代理商们面对新酒饮还需冷静

文 | 螳螂观察&#xff08;TanglangFin&#xff09; 作者 | kinki 沉寂了三年之后&#xff0c;今年酒行业再度热闹了起来&#xff0c;大大小小的展会接连落地&#xff0c;各大酒企都在忙着探索新模式、处理客情、选品招商……想要将过去三年的业绩追回来。 对于酒行业的代理…

MySQL数据库面试题总结(2022最新版)

&#x1f436; 程序猿周周 ⌨️ 短视频小厂BUG攻城狮 &#x1f93a; 如果文章对你有帮助&#xff0c;记得关注、点赞、收藏&#xff0c;一键三连哦&#xff0c;你的支持将成为我最大的动力 本文是《后端面试小册子》系列的第 1️⃣ 篇文章&#xff0c;该系列将整理和梳理笔者作…

EasyExcel 注解fillForegroundColor

EasyExcel 注解fillForegroundColor 对应的颜色值 /** * 样式的数据类 * * author leiyiDong **/ Data // 头背景设置成红色 IndexedColors.RED.getIndex() HeadStyle(fillPatternType FillPatternType.SOLID_FOREGROUND, fillForegroundColor 10) // 头字体设置成20 Hea…

大数据Doris(二十八):Routine Load查看和修改作业

文章目录 Routine Load查看和修改作业 一、​​​​​​​查看导入作业状态

Audition 2024 24.0.0.46(音频剪辑)

Audition 2024是一款非常棒的音频编辑和混合软件&#xff0c;提供了广泛的工具和功能&#xff0c;用于创建、编辑、混合和设计音效。这款软件旨在加速音频和视频制作工作流程&#xff0c;提供具有原始音效的高质量混音。其界面构成清晰&#xff0c;操作简便&#xff0c;适合专业…

Linux下载工具XDM下载安装与使用

Windows上IDM多线程下载非常强大&#xff0c;即能捕捉页面上的视频、图片、音频&#xff0c;又能作为浏览器下载器使用&#xff0c;但是IDM无法在Linux下使用&#xff0c;除非使用wine。不过我们可以在Linux中用XDM(Xtreme Download Manager)代替IDM。 1、XDM下载 Xtreme Dow…

Java的ArrayList中关于删除的常用操作及方法

目录 remove(int index)方法 remove(Object o)方法 removeAll​(Collection c)方法 removeIf​(Predicate filter)方法 removeRange​(int fromIndex, int toIndex)方法 remove(int index)方法 remove(int index)是ArrayList类中用于删除指定位置元素的方法。它接收一个整…

小程序Canvas 2D问题解决,如安卓drawImage不执行、动态高度设置、高度1365(或4096)限制等

我的最新版小程序想在绘制时使用自定义字体&#xff0c;需要将旧版canvas升级到2d新版&#xff0c;发现了许多问题&#xff0c;下面记录一下并提供解决思路&#xff0c;仅供参考&#xff0c;欢迎提供新思路。 一、开发工具和安卓上drawImage不执行&#xff0c;绘制出来是空白&…

聊聊tomcat的connection-timeout

序 本文主要研究一下tomcat的connection-timeout ServerProperties.Tomcat org/springframework/boot/autoconfigure/web/ServerProperties.java public static class Tomcat {/*** Access log configuration.*/private final Accesslog accesslog new Accesslog();/*** Th…

github批量仓库克隆,git clone某个用户的所有仓库

利用github的api工具&#xff0c; 首先拿到用户名为kevin的所有仓库的url&#xff1a; curl "https://api.github.com/users/kevin/repos?per_page100&&page1" | grep -w clone_url >clone.txt过滤一下&#xff1a; grep -o https://[^"]* clone…

DM8单点_闪回查询报错flashback version has been out of date

问题描述 误操作后&#xff0c;闪回查询到某一时间点提示:“[-9801]:flashback version has been out of date.” SQL> SELECT * FROM PERSON_TYPE WHEN TIMESTAMP 2023-11-23 18:51:41; SELECT * FROM PERSON_TYPE WHEN TIMESTAMP 2023-11-23 18:51:41; [-9801]:flashbac…

redis运维(十九)redis 的扩展应用 lua(一)

一 redis 的扩展应用 lua redis如何保证原子操作 说明&#xff1a;引入lua脚本,核心解决原子性问题 ① redis为什么引入lua? lua脚本本身体积小,启动速度快 ② redis引入lua的优势 小结&#xff1a; 类似自定义redis命令 ③ redis中如何使用lua ④ EVAL 说明&#…