首页 > 编程语言 >Learning Hard C# 学习笔记: 3.C#语言基础

Learning Hard C# 学习笔记: 3.C#语言基础

时间:2023-10-05 11:35:20浏览次数:44  
标签:语句 Console WriteLine C# Hard break 枚举 循环 Learning

前言

由于最近工作开始重新使用了C#, 框架也是.Net4.5, 看了下, 这本书是比较合适的, 所以就重新学习了下, 由于之前本人已有C#相关基础, 所以不会所有内容都做笔记, 只会对不熟悉或者比较重要的内容做笔记.

3.2 基础数据类型

3.2.4 枚举类型

枚举类型属于值类型, 用于定义一组命名了的常数.
优点有:

  • 可读性强:枚举类型能够为常量赋予有意义的名称,使得代码更加易读和易于理解。
  • 类型安全:枚举类型在编译时会进行类型检查,避免了在运行时出现不正确的常量赋值。
  • 可扩展性:枚举类型可以随时添加新的常量,而不会对现有代码造成影响。

适用的应用场景:

  • 表示状态或选项:枚举类型可以用于表示有限的状态或选项,比如表示订单的状态(待支付、已支付、已取消)等。
  • 限定取值范围:枚举类型可以用于限定某个变量的取值范围,确保变量只能取枚举中定义的常量值。
  • 提高代码可读性:枚举类型可以使代码更加易读和易于理解,尤其是在需要使用一组常量的情况下。

枚举类型使用enum关键字来完成声明。默认情况下,枚举中的每个元素都是int类型。
如果未在枚举列表中指定元素的值,则默认会将所声明的第一个枚举成员设为0,之后的枚举成员依次加1。
如下面例子, 定义一个变量由于存储今天是周几, 可以使用枚举类型.

// 定义一个枚举类型表示一周中的每一天
// 下面Monday的值为0, 按顺序下去依次加1, Sunday的值为6
enum DayOfWeek
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

class Program
{
    static void Main(string[] args)
    {
        // 使用枚举类型声明变量
        DayOfWeek today = DayOfWeek.Monday;

        // 输出变量的值
        Console.WriteLine("Today is " + today);

        // 使用枚举类型进行条件判断
        if (today == DayOfWeek.Saturday || today == DayOfWeek.Sunday)
        {
            Console.WriteLine("It's a weekend!");
        }
        else
        {
            Console.WriteLine("It's a weekday!");
        }
    }
}

用户也可通过使用冒号,制定一种全新的整数值类型.
比如这样:

// byte类型实际为0~255的8位整数
enum DayOfWeek: byte
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

3.2.5 结构体类型

结构体(struct)是一种值类型(value type),它可以存储多个相关的数据字段并封装在一起。与类不同,结构体是通过值拷贝的方式传递和存储的,而不是通过引用。

结构体的优点:

  • 轻量级:结构体通常比类更轻量级,因为它们不需要继承机制,也不需要进行垃圾回收。
  • 性能高:结构体的值拷贝操作比引用类型的引用传递更高效,适用于存储和传递较小的数据结构。
  • 值语义:结构体是值类型,具有值语义,可以保证每个实例都是独立的。

结构体的应用场景:

  • 表示简单的数据类型:例如坐标、颜色等。
  • 封装多个相关的数据字段:例如日期、时间、复数等。
  • 优化性能:当需要频繁创建和销毁对象时,使用结构体可以减少垃圾回收的开销。

下面是一个代码示例, 展示了如何定义和使用一个结构体来表示日期,并提供计算两个日期之间天数差的功能

using System;

public struct Date
{
    public int Year { get; set; }
    public int Month { get; set; }
    public int Day { get; set; }

    // 构造函数
    public Date(int year, int month, int day)
    {
        Year = year;
        Month = month;
        Day = day;
    }

    // 计算两个日期之间的天数差
    public int DaysBetween(Date otherDate)
    {
        DateTime date1 = new DateTime(Year, Month, Day);
        DateTime date2 = new DateTime(otherDate.Year, otherDate.Month, otherDate.Day);
        TimeSpan diff = date2 - date1;
        return diff.Days;
    }
}

public class Program
{
    public static void Main()
    {
        Date date1 = new Date(2022, 1, 1);
        Date date2 = new Date(2022, 1, 10);
        int days = date1.DaysBetween(date2);
        Console.WriteLine("Days between date1 and date2: " + days);
    }
}

在上面的代码中,我们定义了一个结构体Date来表示日期,包含年、月、日三个字段。通过在结构体中定义一个方法 DaysBetween,我们可以计算两个日期之间的天数差。在 Main 方法中,我们创建了两个日期实例,并调用 DaysBetween 方法来计算它们之间的天数差,并将结果打印输出。

3.5 C#中的语句

3.5.3 跳转语句

在循环语句中,如果需要在循环结束之前退出整个循环,你可以使用跳转语句。C#中包含4种跳转语句。

  • break 语句:直接退出整个循环。
  • continue 语句:立即终止本次循环,但会继续执行下一次循环。
  • goto 语句:跳出循环到已标记好的位置上(为了使代码易于阅读和理解,不建议大家使用goto语句退出循环)。
  • return 语句:退出循环和循环所在的函数。

下面的代码演示了break 与continue 的区别。你可以通过二者的运行结果理解“终止当前循环”的含义。

// 演示break与continue的区别
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("使用continue退出循环的情况:");
        for (int i = 0; i < 5; i++)
        {
            if (i == 2)
            {
                continue;
            }

            Console.WriteLine("当前i的值为:{0}",i);
        }

        Console.WriteLine("使用break退出循环的情况:");
        for (int i = 0; i < 5; i++)
        {
            if (i == 2)
            {
                break;
            }

            Console.WriteLine("当前i的值为:{0}", i);
        }

        Console.Read();
    }
}

结果如下:

使用continue推出循环的情况:
当前i的值为:0
当前i的值为:1
当前i的值为:3
当前i的值为:4
使用break退出循环的情况:
当前i的值为:0
当前i的值为:1

在以上代码中,由于continue 语句只退出本次循环,下一次循环仍会执行,所以当i 等于2时,if 的条件表达式为true ,continue 语句生效退出该次循环,i=2 的值没有输出到控制台中。而break 语句是用于退出整个循环的,当i 等于2时,if 的条件得到满足,break 语句生效使循环体不再执行,i=2 、i=3 和i=4 的值都不会被输出到控制台中。

下面代码演示了break和return的区别:

// return与break区别的演示
class Program
{
static void Main(string[] args)
    {
        Console.WriteLine("使用break退出循序的情况:");
        for (int i = 0; i < 5; i++)
        {
            if (i == 2)
            {
                break;
            }
            Console.WriteLine("当前i的值为:{0}", i);
        }

        Console.WriteLine("循环已退出!");

        Console.WriteLine("使用return退出循序的情况:");
        for (int i = 0; i < 5; i++)
        {
            if (i == 2)
            {
                 return;
            }
            Console.WriteLine("当前i的值为:{0}", i);
        }

        Console.WriteLine("循环已退出!");
    }
}

效果如下:

使用break退出循序的情况:
当前i的值为:0
当前i的值为:1
循环已退出! //使用break, 循环后面的语句执行了,而使用return, 循环后面的语句没有执行
使用return退出循序的情况:
当前i的值为:0
当前i的值为:1

在以上代码中,由于break 只退出了for 循环,所以循环之后的语句会继续执行;而return 则退出了整个Main 函数,for 循环后面的“循环已退出”语句不会输出到控制台窗体中。

标签:语句,Console,WriteLine,C#,Hard,break,枚举,循环,Learning
From: https://www.cnblogs.com/cogito/p/LearningHardCSharpStudyNote_03.html

相关文章

  • c语言代码练习17
    需求:判断用户输入的一个数字是否为一个素数。#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>voidayue(int*pinput){inti=0;for(i=2;i<*pinput;i++){if(*pinput%i==0){printf("您输入的数字不是一个......
  • Learning Hard C# 学习笔记: 4.C#中的类
    类是面向对象语言都有的一种数据类型,它的存在在于将现实中的概念抽象概括为代码中的数据类型.4.1什么是类?以人类这个概念为例,人类就可以作为一个类,人类是一个种群,这个种群中包包含许多个体,这些个体可以当作一个对象.比如说小明就是人类中的一个个体,他是人类这个......
  • cmd powershell 命令行窗口保存更多的历史记录输出行数,防止上面的输出被自动删除
    布局-屏幕缓冲区大小-高度调大或者是用https://stackoverflow.com/questions/71099275/can-view-the-history-of-powershell-outputs这个办法自动保存到一个txt文件中参考https://stackoverflow.com/questions/1740876/more-lines-in-command-window ......
  • delphi中FormDestroy和FormClose的区别和联系
    在Delphi中,FormDestroy和FormClose是用于处理窗体关闭事件的两个不同的事件处理程序。它们有一些区别和联系,下面我将详细解释它们之间的差异和关联:FormDestroy事件:FormDestroy事件是一个在窗体销毁时触发的事件。这个事件通常用于释放在窗体生命周期内创建的资源,如对象、......
  • Electrical CAD安装包 电气工程-Electrical CAD安装包下载
    AutoCADElectrical是一款功能强大、专业的电气设计软件。它具有电气符号库和符号自动编号、电气原理图设计、电线和电缆管理、PLC和控制系统集成、即时错误检查和报告、实时协作与协同设计、自动生成图表和表格、自定义和可扩展性等特点。通过使用AutoCADElectrical,电气工程师可......
  • AutoCAD Electrical 2020 64位简体中文安装版下载 安装包下载
    AutoCADElectrical2013基于在AutoCAD2013打造,Electrical版本也叫AutoCAD电气版,在AutoCAD的基础上添加了一个Electrical模块,内置简体中文,增加了多种工具和一整套电气设计CAD功能,如符号库、物料清单(BOM)报告和PLCI/O设计等等,增强了界面视觉效果,专业的电器设计工具可极大的提高了......
  • 【分享】office 2007、2010、2013最终版分享 (转)
    转自宋永志博客,宋永志博客-最纯净的系统下载站(songyongzhi.com)Office2007SP3简体中文专业增强版2019.02(终结版)软件介绍:1、Office2007SP3专业增强版,集成补丁至2019年02月,集成正版序列号,安装完后自动激活。2、Office2007只有32位版本,可以兼容64位系统,请放心使用。3、......
  • VC++编写ActiveX控件方法
    暑假在做一个项目的时候,本来是用C#.NET来写的一个港口进出闸的流程控制程序,里面涉及一个响应用PLC的采集信息的问题(PLC用串口和工控机相连接),然后思考如何用C#写串口通讯程序,结果师兄在一旁直接用VC++写了一个“*.ocx控件”,并在自己的电脑上进行了测试,完工后就把生成的“*.ocx”控......
  • 11 ServletContext 的应用
    实际上就是讲解servletcontext对象的方法。。。。经典白学,过时的,不会被用到的技术1.资源共享2.转发requestdispather().forward();3.读取资源文件......
  • 小目标1:编写一个基本的TCP服务器程序
    小目标1:编写一个基本的TCP服务器程序头文件1#include<cstdio>//C++标准库的头文件2#include<unistd.h>//Unix标准头文件3#include<sys/types.h>//这个头文件定义了各种系统相关的数据类型4#include<sys/socket.h>//这个头文件用于网络编程,包含了与套接字(socket)相关......