1、枚举类型(Enumeration type)

enum 类型名{枚举项 逗号隔开}   是一种数据类型不是变量,如:

enum WeekDays {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}

枚举类型的定义代码写在主函数的外面,和主函数并列放置。

每个枚举项都关联一个整数,所以我们可以直接用枚举项关联的整数进行赋值,但必须进行显示转换。必要时我们也可以将枚举项赋值给整数变量,也需要进行显示转换。如:

WeekDays today = WeekDays.Sunday;
today = (WeekDays)6;
Console.WriteLine((int)today);//与Console.WriteLine(Convert.ToInt32(today)); 效果一致
Console.WriteLine("Today is "+today);
输出:

因为每个枚举项都关联一个整数,所以枚举型变量可参与运算和循环。(在过去的学习笔记中发现过这一知识点)

在默认情况下,枚举项关联值类型为int型,也可以为枚举项指定更合适的数据类型。关联值可以是byte、sbyte、short、ushort、int、uint、long、和ulong等类型。方法是在声明后加“:其他类型” 如:

enmu WeekDays:short

{

Sunday,

Monday,

Tuesday,

Wednesday,

Thursday,

Friday,

Saturday

}

枚举的好处:使用直观的标识符代替数字,增强了程序的可读性;每个枚举项都关联着一个数字,可以参加计算和循环;枚举变量只能取枚举项的值,有利于编译器检查出非法的赋值,增加了程序的健壮性。同时由于在编译阶段,编译器会把枚举项编译成对应的整数,系统不会造成性能损失。

2、结构体

struct Student

{

public int number;

public string name;

public string sex;

public string birthday;

}

和枚举类型一样,结构体的定义代码应在主函数之外,其实所有定义类型的代码都应在主函数之外。

( 结构体补充知识:

struct 类型是一种值类型,通常用来封装小型相关变量组,例如,矩形的坐标或库存商品的特征。

结构还可以包含构造函数、常量、字段、方法、属性、索引器、运算符、事件和嵌套类型,但如果同时需要上述几种成员,则应当考虑改为使用类作为类型。

结构可以实现接口,但它们无法继承另一个结构。因此,结构成员无法声明为 protected。

声明结构的默认(无参数)构造函数是错误的。总是提供默认构造函数以将结构成员初始化为它们的默认值。在结构中初始化实例字段也是错误的。

如果使用 new 运算符创建结构对象,则会创建该结构对象,并调用适当的构造函数。与类不同,结构的实例化可以不使用 new 运算符。如果不使用 new,则在初始化所有字段之前,字段都保持未赋值状态且对象不可用。

对于结构,不像类那样存在继承。一个结构不能从另一个结构或类继承,而且不能作为一个类的基。但是,结构从基类 Object 继承。结构可实现接口,其方式同类完全一样。

与 C++ 不同,无法使用 struct 关键字声明类。在 C# 中,类与结构在语义上是不同的。结构是值类型,而类是引用类型。

综上:当参数类型为int、double等基本类型时,实参和形参之间进行值传递,实参和形参占用不同的内存空间,形参的变化不对实参造成影响。)

示例 1
说明
下面的示例演示使用默认构造函数和参数化构造函数的 struct 初始化。

代码
C#  复制代码
public struct CoOrds
{
    public int x, y;

public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

C#  复制代码
// Declare and initialize struct objects.
class TestCoOrds
{
    static void Main()
    {
        // Initialize:  
        CoOrds coords1 = new CoOrds();
        CoOrds coords2 = new CoOrds(10, 10);

// Display results:
        System.Console.Write("CoOrds 1: ");
        System.Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);

System.Console.Write("CoOrds 2: ");
        System.Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y);
    }
}

输出
CoOrds 1: x = 0, y = 0

CoOrds 2: x = 10, y = 10

示例 2
说明
下面举例说明了结构特有的一种功能。它在不使用 new 运算符的情况下创建 CoOrds 对象。如果将 struct 换成 class,程序将不会编译。 (此情况只针对定义了public的成员变量,其他的还是需要在创建对象后才可,如属性)

代码
C#  复制代码
public struct CoOrds
{
    public int x, y;

public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

C#  复制代码
// Declare a struct object without "new."
class TestCoOrdsNoNew
{
    static void Main()
    {
        // Declare an object:
        CoOrds coords1;

// Initialize:
        coords1.x = 10;
        coords1.y = 20;

// Display results:
        System.Console.Write("CoOrds 1: ");
        System.Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);
    }
}

输出

CoOrds 1: x = 10, y = 20

带属性和构造函数的 struct 练习

using System;
using System.Collections.Generic;
namespace Test
{public class Program{static void Main(){Student student1=new Student(0001,"TOM","Male");student1.Name = "Mike";Console.WriteLine("{0:####} {1} {2}",student1.Number,student1.Name,student1.Sex);}}public struct Student{private int number;private string name;private string sex;public Student(int numVar,string nameVar,string sexVar){this.number = numVar;this.name = nameVar;this.sex = sexVar;}public int Number{get{return this.number;}set{this.number = value;}}public string Name{get{return this.name;}set{this.name = value;}}public string Sex{get{return this.sex;}set{this.sex = value;}}}
}

3、数组

数组多种定义方式(含直接赋值方式):

1)元素类型 [] 数组名;

2)元素类型 [] 数组名={初始值列表};

3)元素类型 [] 数组名=new 元素类型[元素个数];

4)元素类型 [] 数组名=new 元素类型[]{初始值列表};

5)元素类型 [] 数组名=new 元素类型[元素个数]{初始值列表};

如果只做了申明,没有赋值,如上述的1)和3),赋值如下

对应1) 数组名 = new 元素类型[元素个数];

后面再对数组的元素分别赋值,如 数组名[所在位置索引]=值;

或    数组名 = new 元素类型[]{初始值列表};

对应3) 直接对数组的元素分别赋值,如 数组名[所在位置索引]=值;

foreach循环语句是针对集合的循环语句,数组也可以被看做是个集合,依次从集合里取出元素进行处理。

foreach(元素类型 元素变量 in 数组名)

foreach只能对集合进行读取操作,不能通过元素变量修改数组中元素的值。不要把此处的元素变量和数组中的元素混为一谈。

            int[] arrayInt;arrayInt = new int[] { 1,2,3,4,5};foreach(int i in arrayInt){Console.WriteLine(i);}

二维数组

例子:

int[,] matrix1 = new int[3,3]{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };//new int[3,3]可以写成new int[,]或者不写 都是可行的

foreach (int arrayLine in matrix)
{
     Console.WriteLine(arrayLine);

}

可变数组

int[][] matrix=new int[3][];
matrix[0] = new int[] { 1, 2 };
matrix[1] = new int[] { 3, 4, 5, 6, 7 };
matrix[2] = new int[] { 8, 9, 10 };

可变数组的形式才可以用到双重foreach循环逐行输出,普通二维数组想用双重foreach,必须将形式改为可变数组的形式。

可变数组:

int[][] arrayChange = new int[2][];arrayChange[0] = new int[] { 1, 2, 3 };arrayChange[1] = new int[] { 4, 5, 6, 7 };foreach (int[] line in arrayChange){foreach (int element in line){Console.WriteLine(element);}}

普通二维数组:

int[][] matrix=new int[3][];matrix[0] = new int[] { 1, 2, 3 };matrix[1] = new int[] { 4, 5, 6 };matrix[2] = new int[] { 7, 8, 9 };foreach (int[] arrayLine in matrix){foreach (int element in arrayLine){Console.Write("{0,-6}", element);}Console.WriteLine();}

注意:此处的int[][]虽然与int[,]看上去一样,int[,] matrix1 = new int[,]{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

但两者截然不同,不能将matrix1与matrix相互赋值,在普通形式下,是不能用双重foreach的,也就是说:定义了二维数组后,普通形式下是不认可martix1[0]。这是为什么,存留疑问!

转载于:https://www.cnblogs.com/365up/archive/2009/10/11/1581036.html

用《叩响C#之门》复习C#基础知识 第五章 枚举、结构体和数组相关推荐

  1. 工业控制计算机硬件基础知识,第五章 工业控制计算机及其接口技术知识 机电一体化课件.ppt...

    第五章 工业控制计算机及其接口技术知识 机电一体化课件.ppt (3) 编程方法举例 1. A/D编程 下面C语言例程为软件触发A/D和软件查询方式完成A/D转换功能,模拟输入范围为±5V增益为1. ...

  2. Photoshop基础知识——第五章(色彩调整与校正)

    文章目录 一.色彩调整与校正: 二.色阶: 三.曲线: 四.亮度/对比度: 五.色彩平衡: 六.色相/饱和度: 七.Camera Raw: 八.自然饱和度: 九.黑白: 一.色彩调整与校正: 混合模式 ...

  3. c++基础知识第十天:结构体嵌套结构体,结构体作函数参数

    一.结构体嵌套结构体 结构体内的成员可以是另一个结构体(访问时用.访问到不能访问为止) 1.例如:每个老师指导一个学员,一个老师的结构体中嵌套一个学生的结构体 #include<iostream ...

  4. 超详细的计算机网络基础知识总结 第一章:概述

    本文基于:王道计算机考研-计算机网络 顺便提一嘴,王道计算机网络的小姐姐声音真滴好听 相关文章 超详细的计算机网络基础知识 第二章-物理层 超详细的计算机网络基础知识 第三章:数据链路层 超详细的计算 ...

  5. 自用的快速复习Java基础知识,不适用于每一个人

    自用的快速复习java基础知识,不适用于每一个人 问题背景 1. 类定义出来的变量称为**对象** [IDEA安装](https://www.jb51.net/article/193853.htm) ...

  6. Python复习笔记——基础知识

    Python复习笔记-基础知识 文章目录 Python复习笔记-基础知识 Python变量 基于值的内存管理方式 赋值语句的执行过程 Python定义变量名的规范 运算符和表达式 加+ 乘* 除/ % ...

  7. 什么是人们常用的计算机设备之一,计算机:复习二基础知识复习

    <计算机:复习二基础知识复习>由会员分享,可在线阅读,更多相关<计算机:复习二基础知识复习(15页珍藏版)>请在人人文库网上搜索. 1.基础知识复习2,计算机系统,一.知识框图 ...

  8. 第一章c语言基础知识答案,第一章 C语言的基础知识练习题

    第一章 C语言的基础知识练习题 第一章 C语言的基础知识 第一节 对C语言的初步认识 习题 1. 下列叙述中错误的是 B A)任何一个C程序都必须有且仅有一个main函数,C语言总是从main函数开始 ...

  9. [云炬创业基础笔记]第五章创业机会评估测试2

    [云炬创业基础笔记]第五章创业机会评估测试1

最新文章

  1. 吃完降压药多久能睡觉 降压药什么时候吃好
  2. oracle中over 语法,Oracle语法之OVER(PARTITIONBY..)及开窗函数
  3. 攻防世界Reverse第十题getit
  4. 解决: -bash: docker-compose: command not found、linux 安装 docker-compose
  5. java常用设计模式一:单例模式
  6. 大数据实验报告总结体会_建设大数据中台架构思考与总结
  7. 深入了解Struts2返回JSON数据的原理及具体应用范例
  8. 第5章 函数与函数式编程
  9. 仿网易/QQ空间视频列表滚动连播炫酷效果
  10. 用Python实现ax²+by的图灵机【形式语言与自动机】
  11. Python 语言程序设计(5-2)七段数码管程序编写设计
  12. SCT9320STDR,3.8V-32V输入,2A,低EMI,超低功耗同步降压DCDC转换器
  13. ffmpeg转码视频
  14. 《数字经济全景白皮书》中国商业银行普惠金融可持续发展能力评价2022
  15. 北京进一步强化节能实施,能耗监测、余热回收等为数据中心重点
  16. c++如何批量修改文件后缀名
  17. 【WB32库开发】第12章(上)TIM1高级定时器——PWM输入捕获
  18. 5月3日云栖精选夜读:乾隆会判阿尔法狗死刑吗 ——浅谈当前人工智能的技术进化...
  19. DELMIA软件 初始界面的设定
  20. Java市场真的饱和了吗?到底Java都有什么优势

热门文章

  1. 从零单排学Redis【铂金一】
  2. spring mvc事务没有生效的原因
  3. Spring框架中的设计模式(三)
  4. PL/SQL Developer 和 instantclient客户端快速安装配置(图文)
  5. 网络:TCP停止等待、超时重传、滑动窗口、拥塞控制、快重传和快恢复
  6. Android --- 修改百度地图的显示范围的大小
  7. java程序设计 第2版 唐大仕_《Java程序设计(第2版)》唐大仕 源代码
  8. windows 2012 apache php mysql_Windows Server 2012 R2搭建 Apache+PHP+MYSQL环境
  9. 关键帧动画html例子,Bounce.js 是一个漂亮的CSS3关键帧动画生成工具和类库_前端开发者...
  10. 两个service事务统一_RocketMQ进阶 - 事务消息