C#中的迭代器和分部类

news2024/9/24 18:19:56

目录

一、迭代器

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();            //实例化Family
            foreach (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());    //操作数1
                int N = int.Parse(textBox2.Text.Trim());    //操作数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.生成效果

 

 

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

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

相关文章

python-opencv在图片中绘制各种图形

python-opencv在图片中绘制各种图形 1.绘制直线 2.绘制矩形 3.绘制圆 4.绘制椭圆 5.绘制多边形 6.嵌入文字 实现代码都在下面了&#xff0c;代码中参数做了简单注释 import copy import math import matplotlib.pyplot as plt import matplotlib as mpl import numpy a…

全球三大网络安全威胁

网络安全IP数据云 - 免费IP地址查询 - 全球IP地址定位平台威胁日益复杂&#xff0c;涵盖了多个层面&#xff0c;从个人用户到大型企业&#xff0c;都面临着不同形式的网络安全威胁。以下是当前全球范围内广泛认可的三大网络安全威胁&#xff1a; 1. 恶意软件和病毒攻击&#x…

新一代网络监控技术——Telemetry

一、Telemetry的背景 传统的网络设备监控方式有SNMP、CLI、Syslog、NetStream、sFlow&#xff0c;其中SNMP为主流的监控数据方式。而随着网络系统规模的扩大&#xff0c;网络设备数量的增多&#xff0c;网络结构的复杂&#xff0c;相应监控要求也不断提升&#xff0c;如今这些…

11.docker的网络-docker0的理解及bridge网桥模式的介绍与实例

1.docker0的基本理解 安装完docker服务后&#xff0c;我们首先查看一下宿主机的网络配置 ifconfig我们可以看到&#xff0c;docker服务会默认在宿主机上创建一个虚拟网桥docker0&#xff0c;该网桥网络的名字称为docker0。它在内核层连通了其他物理或者虚拟网卡&#xff0c;这…

微服务实战系列之Feign

前言 不知不觉&#xff0c;“微服务实战系列”已完成了六篇&#xff0c;每篇都聚焦一个主题&#xff0c;目的是便于各位盆友能够快速、全面地接收和消化。 博主从服务注册到服务监控&#xff0c;从服务路由到服务安全&#xff0c;从身份认证到加密技术均有涉猎。凡此均有关微服…

SpringMVC(三)

十、拦截器 1、拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 SpringMVC中的拦截器需要实现HandlerInterceptor SpringMVC的拦截器必须在SpringMVC的配置文件中进行配置&#xff1a; <bean class"com.atguigu.interceptor.FirstInterceptor">…

【双指针】和为 s 的两个数字

和为 s 的两个数字 文章目录 和为 s 的两个数字题目描述算法思路暴力枚举双指针 代码编写Java代码C代码编写 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 题目描述 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品…

『RabbitMQ』入门指南(安装,配置,应用)

前言 RabbitMQ 是在 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09; 协议标准基础上完整的&#xff0c;可复用的企业消息系统。它遵循 Mozilla Public License 开源协议&#xff0c;采用 Erlang 实现的工业级的消息队列(MQ)服务器&#xff0c;建立在 Erlang …

UML建模图文详解教程01——Enterprise Architect的安装与使用

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方网站&#xff1a;https://www.sparxsystems.cn/products/ea/&#xff1b;图示如下&#xff1a; Enterprise Architect是一个全功能的、基于…

ES 万条以外分页检索功能实现及注意事项

背景 以 ES 存储日志&#xff0c;且需要对日志进行分页检索&#xff0c;当数据量过大时&#xff0c;就面临 ES 万条以外的数据检索问题&#xff0c;如何利用滚动检索实现这个需求呢&#xff1f;本文介绍 ES 分页检索万条以外的数据实现方法及注意事项。 需求分析 用 ES 存储数…

单个视频生成视频二维码,手把手图文教程

单个视频生成视频二维码帮助教程&#xff08;图文教程&#xff09;&#xff0c;手把手教程如下&#xff1a; STEP1 注册帐号 使用视频二维码&#xff0c;您需要注册酷播云用户帐号&#xff08;免费5G空间&#xff0c;普通用户够用&#xff09;。 参考如图1-1&#xff0c;按照…

【数据结构/C++】栈和队列_链栈

链头 栈顶。 #include<iostream> using namespace std; // 链栈 typedef int ElemType; typedef struct Linknode {ElemType data;struct Linknode *next; } *LiStack; // 初始化 void InitLiStack(LiStack &S) {S (LiStack)malloc(sizeof(struct Linknode));S->…

安全框架springSecurity+Jwt+Vue-2(后端开发)

一、创建项目及配置 ①&#xff1a;创建新的项目及常用包 ②&#xff1a;引入依赖和配置 devtools&#xff1a;项目的热加载重启插件 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId&…

RK3399平台开发系列讲解(内核入门篇)ConfigFS 的核心数据结构

🚀返回专栏总目录 文章目录 一、关键数据结构二、config_item 的结构体三、属性和方法沉淀、分享、成长,让自己和他人都能有所收获!😄 📢虚拟文件系统 ConfigFS 是一个特殊的文件系统,旨在提供一种动态配置 Linux 内核和设备的机制。 一、关键数据结构 ConfigFS 的核…

[23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution

paper | proj | code 提出一种基于K-Planes的4D point cloud Representation&#xff1b;提出一种Hybrid appearance model&#xff0c;包含image blending model和SH model。其中&#xff0c;image blending model将3D点映射回原图中求得&#xff0c;SH model通过模型预测求得…

机器学习/sklearn笔记:MeanShift

1 算法介绍 一种基于质心的算法通过更新候选质心使其成为给定区域内点的均值候选质心的位置是通过一种称为“爬山”技术迭代调整的&#xff0c;该技术找到估计的概率密度的局部最大值 1.1 基本形式 给定d维空间的n个数据点集X&#xff0c;那么对于空间中的任意点x的均值漂移…

HCIP --- HCIA(部分汇总)--- 点对点网络

抽象语言 --- 电信号 抽象语言 --- 编码 编码 --- 二进制 二进制 --- 电信号 处理电信号 OSI/RM ---- 开放式系统互联参考模型 --- 1979 --- ISO --- 国际标准化组织 核心思想 --- 分层 应用层 --- 提供各种应用程序&#xff0c;抽象语言转换成编码&#xff0c;人机交互…

导数、方向导数、梯度方向、梯度

导数&#xff1a;自变量改变一定量时&#xff08;大于或小于0&#xff09;&#xff0c;因变量改变多少 方向导数&#xff1a;限定在某一个方向上&#xff0c;自变量改变一定量时&#xff08;大于0&#xff09;&#xff0c;因变量改变多少 梯度方向&#xff1a;方向导数最大的…

PHP 语法||PHP 变量

PHP 脚本在服务器上执行&#xff0c;然后将纯 HTML 结果发送回浏览器。 基本的 PHP 语法 PHP 脚本可以放在文档中的任何位置。 PHP 脚本以 <?php 开始&#xff0c;以 ?> 结束&#xff1a; <?php // PHP 代码 ?> 值得一提的是&#xff0c;通过设定php.ini的相…

【MATLAB源码-第87期】基于matlab的Q-learning算法栅格地图路径规划,自主选择起始点和障碍物。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 Q-learning是一种无模型的强化学习算法&#xff0c;适用于有限的马尔可夫决策过程&#xff08;MDP&#xff09;。它的核心是学习一个动作价值函数&#xff08;action-value function&#xff09;&#xff0c;即Q函数&#xf…