当前位置: 首页 > news >正文

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.生成效果

 

 

相关文章:

C#中的迭代器和分部类

目录 一、迭代器 1.示例源码 2.生成效果&#xff1a; 二、分部类 1.示例源码 2.生成效果 迭代器在集合类中经常使用&#xff0c;而分部类则提供了一种将一个类分成多个类的方法&#xff0c;这对于有大量代码的类非常实用。 一、迭代器 迭代器是可以返回相同类型的值的有…...

Java项目如何打包成Jar(最简单)

最简单的办法&#xff0c;使用Maven插件&#xff08;idea自带&#xff09; 1.选择需要打包的mudule&#xff0c;点击idea右侧的maven插件 2.clean操作 3.选择需要的其他mudule&#xff0c;进行install操作&#xff08;如果有&#xff09; 4.再次选择需要打包的module&#…...

快速掌握Pyqt5的三种主窗口

PyQt5是一个强大的跨平台GUI框架&#xff0c;它提供了多种不同类型的主窗口类&#xff0c;以满足不同的应用需求。下面是PyQt5中最常见的几种主窗口类型及其创建方式的简介&#xff1a; 1. QMainWindow QMainWindow是用于创建具有菜单栏、工具栏、状态栏和中心窗口部件&#…...

Linux vim操作教程(vim 基操、vim替换和查找、 vim改变文本颜色、判断和循环语句)

vim 基操 vim 是一个强大的文本编辑器,常用于在终端环境下编辑文件。下面是一些常用的 vim 操作: 打开文件:在终端中输入 vim 文件名 来打开一个文件,如果文件不存在,则会创建一个新文件。 模式切换: 按下 i 进入插入模式,在该模式下可以输入和编辑文本。按下 Esc 键返…...

mac添加Chrome插件的方法

如果是.crx的插件 更改后缀crx为zip 后续步骤同下文.zip文件 如果是.zip的插件 使用终端进行解压 注意不要用解压工具解压&#xff0c;一定要用终端&#xff0c;命令行解压 // 进入到“插件名.zip”文件的目录下&#xff0c;输入下面命令&#xff1a; unzip 插件名.zip -…...

智能优化算法 | Matlab实现金豺优化算法(GJO)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现金豺优化算法(GJO)(内含完整源码) 源码设计 %%clear clc close SearchAgents_no=30; % Number of search agents Max_iteration=1000...

6、信息打点——Web架构篇语言中间件数据库系统源码获取

1、信息搜集搜集哪些东西&#xff1f; 架构信息收集&#xff0c;主要包括&#xff1a;操作系统、开发语言、中间件容器、数据库类型、第三方软件等&#xff1b; web源码信息收集&#xff0c;CMS开源&#xff1f;闭源&#xff1f;售卖&#xff1f;自主研发&#xff1f; 进行web…...

flutter vscode gradle 配置

我这边主要改了如图两个文件&#xff0c;然后把Gradle的问题解决了 参考文章&#xff1a; flutter运行Runt imeException: Timeout of 120000问题-CSDN博客 flutter配置gradle&#xff08;个人笔记&#xff0c;非教程&#xff09;_flutter gradle_追寻着星星的方向的博客-CSD…...

tcp和 udp区别

相同点&#xff1a;都是传输层协议 不同点 是否面向连接 tcp:面向连接 三次握手&#xff0c;四次挥手端对端连接全双工通信&#xff08;允许双端同时收发数据&#xff09; udp:无连接 无三次握手&#xff0c;四次挥手支持一对一,一对多&#xff0c;多对多 数据传输方式 …...

深度学习之基于Pytorch的昆虫分类识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介系统架构技术亮点 二、功能三、系统四. 总结 一项目简介 # 深度学习基于 Pytorch 的昆虫分类识别系统介绍 深度学习在图像分类领域取得了显著的成就&#…...

mysql字符串转为数字的三种方法、字符串转日期

隐式转换 在MySQL中&#xff0c;使用0运算符可以将一个非数字的值隐式地转换为数字。这在进行数学运算或比较操作时非常有用。 需要注意的是&#xff0c;在使用0进行隐式转换时&#xff0c;MySQL会尽可能将字符串转换为数字。如果字符串不能转换为数字&#xff0c;则会返回0。…...

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷5

1、随着对新冠肺炎研究的深入&#xff0c;多个国家都已经开始了针对新冠肺炎病毒的疫苗的开发。以下关于疫苗的描述中&#xff0c;不正确的是 A、灭活疫苗的基本原理是将经过处理的病原体注射进入人体内 B、大规模接种疫苗可以帮助达成“群体免疫“&#xff0c;阻断病毒传播 …...

PTA-6-45 工厂设计模式-运输工具

题目如下&#xff1a; 工厂类用于根据客户提交的需求生产产品&#xff08;火车、汽车或拖拉机&#xff09;。火车类有两个子类属性&#xff1a;车次和节数。拖拉机类有1个子类方法耕地&#xff0c;方法只需简单输出“拖拉机在耕地”。为了简化程序设计&#xff0c;所有…...

重新使用hbase前

启动关闭Hadoop和HBase的顺序一定是&#xff1a; 启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop 1.挂载共享文件夹到挂载点 sudo mount -t vboxsf virtualmachineShare /mnt/shared2.进入hadoop目录下启动hadoop cd /usr/local/hadoop/ ./sbin/start-all.sh …...

Web 自动化神器 TestCafe(二)—元素定位篇

今天主要给大家介绍一下testcafe这个框架元素定位的方法。 一、CSS 选择器定位 使用 testcafe 对元素进行操作的时候&#xff0c;我们可以直接通过 CSS 选择器指定要操作的元素&#xff0c;比如&#xff0c;点击元素&#xff0c;input 输入文本内容&#xff0c;如下&#xff1…...

DRF-通用分页器(PageNumberPagination):ListModelMixin可以使用的通用分页器

一、ListModelMixin 和GenericAPIView源码 ListModelMixin 是一个单一功能类&#xff0c;必须配合GenericAPIView&#xff08;或其子类&#xff09;来一起使用&#xff0c;才能完成其视图的功能 class ListModelMixin:"""List a queryset."""d…...

移动机器人,开启智能柔性制造新篇章

智能制造是当今工业发展的必然趋势&#xff0c;而柔性制造则是智能制造的重要组成部分。在这个快速变革的时代&#xff0c;如何提高生产效率、降低成本、增强灵活性成为了制造业的关键挑战。富唯智能移动机器人应运而生&#xff0c;为柔性制造注入了新的活力。 基于富唯智能AI-…...

视频云存储EasyCVR平台国标接入获取通道设备未回复是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

【Web题】狼追兔问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

4-Docker命令之docker info

后续为大家逐个讲解一下docker常用命令及其相关用法。docker常用命令查看如下: [root@centos79 ~]# docker --helpUsage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersCommon Commands:run Create and run a new container from an imageexec…...

GDSDecomp:如何用逆向工程工具在5分钟内完成Godot项目恢复?

GDSDecomp&#xff1a;如何用逆向工程工具在5分钟内完成Godot项目恢复&#xff1f; 【免费下载链接】gdsdecomp Godot reverse engineering tools 项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp 当你面对一个打包好的Godot游戏PCK文件&#xff0c;想要了…...

KMS_VL_ALL_AIO:Windows和Office批量激活的终极指南

KMS_VL_ALL_AIO&#xff1a;Windows和Office批量激活的终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款基于KMS&#xff08;密钥管理服务&#xff09;技术的智能激…...

Unlock Music音乐解锁终极指南:5分钟免费解密任何加密音频文件

Unlock Music音乐解锁终极指南&#xff1a;5分钟免费解密任何加密音频文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址…...

5分钟快速上手taskt:免费开源的终极RPA办公自动化神器

5分钟快速上手taskt&#xff1a;免费开源的终极RPA办公自动化神器 【免费下载链接】taskt taskt (pronounced tasked and formely sharpRPA) is free and open-source robotic process automation (rpa) built in C# powered by the .NET Framework 项目地址: https://gitcod…...

S32K146 ADC实战:从EB Tresos配置到数据读取,一个真实电池电压采集项目的完整流程

S32K146 ADC实战&#xff1a;从EB Tresos配置到数据读取&#xff0c;一个真实电池电压采集项目的完整流程 在嵌入式系统开发中&#xff0c;电池电压监测是一个基础但至关重要的功能。无论是新能源汽车的BMS系统&#xff0c;还是便携式设备的电源管理&#xff0c;精准的电压采集…...

免费开源!Vin象棋智能连线工具完整使用教程

免费开源&#xff01;Vin象棋智能连线工具完整使用教程 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi Vin象棋是一款基于深度学习技术&#xff08;YOLOv5…...

如何安全备份微信聊天记录?WeChatMsg让数据主权回归用户

如何安全备份微信聊天记录&#xff1f;WeChatMsg让数据主权回归用户 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeC…...

FLUX.1-Krea-Extracted-LoRA实操手册:Streamlit缓存机制加速连续生成

FLUX.1-Krea-Extracted-LoRA实操手册&#xff1a;Streamlit缓存机制加速连续生成 1. 模型概述与快速体验 FLUX.1-Krea-Extracted-LoRA 是一款专为真实感图像生成设计的模型&#xff0c;它通过从 FLUX.1-Krea-dev 基础模型中提取的 LoRA 风格权重&#xff0c;显著提升了生成图…...

5个机器学习可视化黑马工具:从EDA到模型解释

1. 项目概述&#xff1a;机器学习可视化工具的隐藏瑰宝在数据科学项目中&#xff0c;可视化从来不只是锦上添花——它直接决定了你的模型价值能否被决策者理解和采纳。虽然Matplotlib和Seaborn已经成为行业标配&#xff0c;但当我连续三个季度需要向非技术高管汇报机器学习项目…...

贝叶斯最优分类器:理论与应用解析

1. 贝叶斯最优分类器入门指南 在机器学习领域&#xff0c;分类问题就像一场永不停歇的智慧较量。我们不断开发新算法&#xff0c;调整参数&#xff0c;优化模型&#xff0c;只为了那百分之几的准确率提升。但你是否想过&#xff0c;理论上存在一个完美的分类器&#xff0c;它的…...