C#语言简介
1、课程简介
1.1、什么是程序( Program )
为什么需要程序
怎样编写程序和程序语言的选择
●编辑>编译>调试>发布
●编程的学习路径
●纵向:语言→类库>框架
●横向:命令行程序,桌面程序,设备(平板/手机)程序,Web(网站/服务)程序,游戏....
1.2、什么是软件:
1.与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。
2.可以分为系统软件和应用软件。
3、软件并不是一定要运行在计算机上的。
特点:
1、无形,没有物理形态。
2.渗透了大量的脑力劳动,人的逻辑思维。
3.不会老化磨损,因为没有物理形态,但是需要定期维护和技术更新。
4、开发和运行需要依赖特定的计算机环境。
5、具备可复用性,容易被复制,形成多个副本。
1.3、为什么需要软件:
1、计算机的普及。
2、提高办公效率。
3.影音娱乐。
4.游戏娱乐。
5.等等....
编写软件有哪些编程语言?
C#,VB, php, C语言,C++, Java, Python, 等等....
编程语言分为几种?
1.汇编语言(直接对硬件进行操作) MASM、NASM、TASM、GAS、FASM、 RADASM等。应用于对时效性要求高的程序,大型程序的核心模块,工业控制方面。
2.脚本语言(为了缩短传统的编写编译链接运行的过程而创建的计算机编程语言)是一-种解释性的语言,例如Python, JavaScript等
3、高级语言(不能直接被计算机识别,需要进行转换)
转换方式可分为两类:解释类,编译类。
解释类:类似于同声翻译,一边被解释器编译成机器语言,一边执行,效率较低,但是灵活。例如: Python, javaScript, Java
编译类:程序执行之前要先进行编译,编译成机器语言后再去执行。缺点是每次修改代码后都要重新进行编译。例如: C, C++,C#
2、.net平台&C#语言简介
.Net:是.Net Framework的简称,它是微软开发的一个框架,是一种平台,一种技术。
.Net是一个平台,也是一个框架,平台承载着框架,框架上运行着软件应用。
编程语言是一门计算机语言,要想让软件能够执行人们的指令,需要通过一种编程语言和计算机通讯
C#,Csharp:是微软开发的一种高级编程语言,只是一种编程语言。可以开发运行于.Net平台 上的应用。在.Net平台上可以使用的还有VB,F#,C++等语言
C#集成了Java和C+ +两门语言的的优点,学习起来简单易学,适合作为入门语言。
桌面应用程序: C/S是Client/Server的缩写。 服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统。客户端需要安装专用的客户端软件。例如QQ,或者Office办公软件。
Web应用程序: B/S是Browser/Server的缩写, 客户机上只要安装个浏览器(Browser) ,服务器安装数据库。在这种结构下,用户界面完全通过WWW浏览器实现,-部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。例如,淘宝,京东等购物网站。
两者的区别:
1.硬件环境不同: C/S 一般建立在专用的网络上,小范围里的网络环境; B/S建立在广域网之上的。
2、对安全要求不同: C/S - -般面向相对固定的用户群,对信息安全的控制能力很强; B/S 建立在广域网之上,对安全的控制能力相对弱,
可能面向不可知的用户。
3、对程序架构不同: C/S程序可以更加注重流程,对系统运行速度可以较少考虑: B/S对安全以及访问速度的多重的考虑。
4、开发维护成本
5.客户端负载
3、开发环境与学习资料
●下载Visual Studio ( http://www.visualstudio.com/ )
●安装Visual Studio
●学习资料
●下载离线MSDN文档
●C#语言定义文档( Language Specification )
●推荐书籍: C# 5.0 In A Nutshell
VS是Microsoft Visual Studio的简称。VS是美国微软公司的开发工具包系列产品。
Visual Studio是目前最流行的Windows平台应用程序的集成开发环境。
最新版本为Visual Studio 2019版本,基于.NET Framework 4.6/7。
2002-2019版本
安装VS2017开发工具
勾选帮助文档
VS2017工具各个组成部分:
菜单栏,工具栏,解决方案窗口,属性窗口,错误列表,局部变量,监视窗口等
VS的一些常用设置:行号,字体,背景色等。
4、Hello World
分别使用控制台和窗体应用创建第个Hello World项目。
如何启动项目,启动项目的快捷键。
C#语言的编程语言规则:
必须以分号结束一行。
要使用英文半角输入法编写代码。
C#是一门强类型语言,严格区分大小写。
一个解决方案中有多个项目的时候如何设置启动的项目。
如何卸载和加载其中的某个项目。
C#中的组织结构的关键概念是程序(program).命名空间(namespace).类型(type)、成员(member)和程序集(assembly)。C#程序由一个或多个源文件组成。程序中声明类型,类型包含成员,并且可按命名空间进行组织。
创建项目时需要注意项目名称和解决方案名称的区别,一个解决方案中可以包含多个项目。
VS中有多种类型的项目可供用户进行选择。
项目中包含多个类文件。例如: Properties (属性文件),App.config (配置文件),Program.cs (程序主入口文件)等。
Program.cs,类文件中的代码组成部分:
using,(引用命名空间的关键字)
namespace, (声明命名空间的关键字)
calss, (类的修饰符)
4.1、创建一个控制台项目
4.1.1、
4.1.2、
4.1.3、
4.1.4、
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//使用using关键字,将一些命名空间引入到类文件中
using System.Threading.Tasks;
//自己创建的命名空间 项目名
namespace HelloWorld
{
class Program //class 是类的修饰符
{
//程序入口
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.WriteLine("Hello World!");
Console.WriteLine("Hello World!");
Console.Write("Hello World!");
Console.Write("Hello World!");
Console.Write("Hello World!");
Console.ReadKey();
}
}
}
4.1.5、运行
4.2、创建一个窗体项目
4.2.1、可右击解决方案创建
4.2.2、选择窗体
4.2.3、右击按钮属性test可更改名字
4.2.4、代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsHelloWorld
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello World! ");//显示信息提示框
}
}
}
4.2.5、运行
5、注释&快捷健
5.1、注释的三种类型:
1、单行注释:从开始标记到该行行尾的文本被编译器忽略。//
2、带分隔符的注释:从开始标记到结束标记之间的文本被编译器忽略。/* */
3、文档注释:文档注释包含xml文本,可用于产生程序文档。
注释的两种形式:单行注释和带分隔符的注释。
1.单行注释以字符//开头并延续到源行的结尾。
2、带分隔符的注释以字符/* 开头,以字符 / 结束。带分隔符的注释可以跨多行。
注释不嵌套。字符序列/和/在//注释中没有任何特殊含义,字符序列/和/在带分隔符的注释中没有任何特殊含义。在字符和字符串内不处理注释。
文档注释:
///
///这里是对文档的注释内容
///
5.2、VS常用快捷键:
Ctrl+J 自动补全代码
Ctrl+K+ D 格式化代码,代码对齐
Ctrl+K+C 注释所选代码
Ctrl+K+U 取消注释代码
Ctrl+Z 撤销
Ctrl+S保存(一定定要养成有事儿没事儿按下保存的好习惯)。
选中+F1 打开帮助文档
do+两次Tab 代码片段
5.3、#Region折叠代码块
6、变量&变类型
? C#中的类型有两种:值类型(value type)和引用类型(reference type)。值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象。对于引用类型,两个变量可能引用同一一个对象,因此对一一个变量的操作可能影响另-个变量所引用的对象。对于值类型,每个变量都有它们自己的数据副本(除ref和out参数变量外),因此对一一个变量的操作不可能影响另一个变量。
? C#的值类型进一步划分为简单类型(simple type).枚举类型(enum type).结构类型(struct type)和可以为null的类型(nullable type), C#的引用类型进一步划分为类类型(class type).接口类型(interface type)、数组类型 (array type)和委托类型(delegate type)。
变量:用于在计算机中存储数据,变量名代表内存中的一个存储单元,在对程序编译连接的时候由系统给变量分配一个地址。
在程序中从变量中取值,实际上是通过变量名找到相应的内存单元,从其中读取数据。
声明变量的语法:
变量类型变量名;
变量赋值(初始化)
变量名=值:
值类型
简单类型
有符号整型: sbyte. short. int. long
无符号整型: byte. ushort. uint. ulong
字符型: char
浮点型: float. double
高精度小数型: decimal
static void Main(string[] args)
{
int age;
age = 18;//等号赋值运算符
Console.WriteLine(age);//变量在使用前必须要先赋值也叫初始化
Console.ReadKey();
float fl = 3.50F;
double du = 3.5;
decimal de = 3.5M;
char ch = ‘x‘;//char型的 有且并且要有且只能有一一个字符
string str ="老师说这里可以存储无限长度的文本";
string name, className;
}
布尔型: bool
枚举类型enum E {...}形式的用户定义的类型
结构类型struct S {...}形式的用户定义的类型
可以为null的类型
其他所有具有null值的值类型的扩展
引用类型
类类型
所有其他类型的最终基类: object
字符串: string
class C {...}形式的用户定义的类型
接口类型interface I {...}形式的用户定义的类型
数组类型一维和多维数组,例如int]和int[]
委托类型delegate int D(..)形式的用户定义的类型
7、变量的命名规则&使用规范
变量的使用规则:
1、先声明变量。
2、再给变量赋值。
3、然后再使用变量。
注意:不赋值则无法使用
命名规则:
首字符必须以字母或者@符或者下划线开始。
后面的字符可以是字母,数字或下划线
系统保留的关键字,不可以作为变量名来使用。
命名规范:
camel命名法:首单词首字母小写,后面的单词首字母大写。
多用于简单变量的命名中
Pascal命名法:首单词首字母大写,后面的单词首字母大写。
多用于属性,函数,类,项目等等的命名。
变量的作用范围:
以最近的大括号开始,到对应的大括号结束
红色波浪线表示语法错误,编译器无法完成编译,可以在下面的错误列表中找到错误原因。
绿色波浪线表示警告错误
8、赋值运算符&+号的使用
简单赋值运算符: =
等号表示赋值的意思,将等号右边的值,赋给等号左边的变量。
由等号连接的表达式称之为赋值表达式。
复合赋值运算符:
1、+=
2、-=
3、*=
4、1=
5、%=
int age = 18;
int x = 1,y = 2,z = 3;
z += x;//z=z+x;
Console.WriteLine(z);
Console.ReadKey();
加号: +
1、相加:可以作为计算加法的加号
2、相连接:连接两个字符串,加号两边任一边有字符串, 即为相连接。
intx = 10;
x=20;
Console.WriteLine(x);
此时输出多少?
小栗子:做个自我介绍
我叫什么,我来自哪里,今年多少岁,身高多少,体重多少,现在居住在哪里。
string name = "小明";
string from = "山东";
int age = 18;
int height = 180;
float weight = 70.5f;
string addr = "江苏";
//"我叫name,我来自from,今年age岁, 身鳥heightCM, 体重weightKG, 现在居住在addr";
string str = "我叫"+name+",我来自"+from + ",今年 "+age+"岁,身高" + height +
"CM,体重"+ weight + "KG,现在居住在"+addr;
Console.WriteLine(str);
Console.ReadKey();
9、算数运算符
算数运算符:
+:相加x+y
相减x-y
:相乘 xy
/:相除x/y
%:取余x%y
运算先后顺序:先一元后元;先乘除后加减;先括号内再括号外。
++自加运算符,
-自减运算符。
++或--放在变量的左右是一样的,但在表达式中会有变化
++在左,先自增后返回,
++在右,先返回后自增,
--在左,先自减后返回,
--在右,先返回后自减。
10、关系运算符&逻辑运算符
关系运算符:又称为比较运算符,用来描述两个事物之间的关系,其连接的表达式称之为关系表达式
常用关系运算符有:
<; >; <=; >=; ==; !=;
条件逻辑运算符:
&& 逻辑与(要求使用&&连接起来的关系表达式全部成立的时候,才会返回个True,只要有一个是False, 则会返回False)
**|| ** 逻辑或(只要多个关系表达式中有一个返回值是True,则整个逻辑表达式的返回值是True。全部都是False的话,才会返回False)
**! ** 逻辑非 (取关系表达式的返回结果或者是Bool结果的相反的值
逻辑运算符连接的表达式叫做逻辑表达式。
逻辑运算符两边放的一般是关系表达式或者Bool型的值(Bool类型只有两个值,True和False)
11、占位符&转义符
拼接字符串的方式: +号、占位符。
string str = string.Format("我叫{0},我来自{1},今年{2}岁,身高{3}CM,体重{4}KG,现在居住在{5}",
"小明", "山东", 18, 180, 70.5, "山东");
什么是占位符?占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号。
占位符可以少占,多填。但是不可以多占,少填。
转义符分为两种:一种是\,一种是@。
@两个作用:取消\转义符:使用系统关键字。
字符@只能对字符创常量起作用。
使用@表示字符串能够跨越行数,用于SQL, JS等。
string @string = @"
离离原上草,
一岁一枯荣,
野火烧不尽,
春风吹又生。";
Console.WriteLine(@string);
Console.ReadKey();
放在标识符前面,可以使用系统关键字,但是不作为标识符本身的一部分。例如@Class @String
Y‘单引号"双引号
1反斜杠\t Tab键
\b退格
\f换页
\n换行
\r回车
\t水平制表\v垂直制表\0(零)空字符
12、数据类型转换
隐式转换:从类型A到类型B的转换可在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。
隐式转换不需要做任何工作,也不需要另外编写代码。
隐式数值转换为:
从sbyte到short. int, long. float. double或decimal.
从byte到short, ushort, int, uint. long. ulong. float, double 或decimal.
从short到int, long. float. double 或decimal.
从ushort到int. uint. long. ulong. float. double 或decimal.
从int到long. float, double 或decimal.
从uint到long. ulong. float, double 或decimal。
从long到float. double或decimal.
从ulong到float. double 或decimal.
从char到ushort, int. uint. long. ulong. float, double 或decimal.
从float到double。
显式转换:从类型A到类型B的转换只能在某些情况下进行,转换规则比较复杂,应进行某种类型的额外处理。
顾名思义,在明确要求编译器把数值从一种数据类型转换为另 -种数据类型时,就是在执行显式转换。因此,这需要另外编写代码,代码的格式因转换方法而异。
使用Convert命令进行显式转换。
13、数字格式说明符
常见常用标准数字格式说明符
14、字符串处理
1、ToCharArray() 将此实例中的字符复制到字符数组
2、Length获取并返回当前字符串中字符的数量(Length属性)
3、ToLower()和ToUpper()转换成小写和大写
4、Trim()去除两端的空格或者指定的字符(去开头或去结尾)
5、TrimStart(和TrimEnd()命令, 它们可以把字符串前面或后面的空格删掉
6、string .PadLeft()和string.PadRight(.它们可以在字符串的左边或右边添加空格,使字符串达到指定的长度
7、Equals 比较两个字符串是否相等。Equals(String) Equals(String, String)
8、IndexOf()报告指定字符或字符事在此字符串中的第一个匹配项的索引。
9、Insert() 在此实例中的指定索引位置插入一个指定的String实例
10、IsNullOrEmpty()指示指定的字符串是null还是Empty字符串
11、IsNullOrWhiteSpace()指示指定的字符串是null. 空还是仅由空白字符组成
12、LastIndexOf()指定字符或字符串在此实例中的最后一个匹配项的索引位置
13、 Remove()删除此字符串中从指定位置到最后位置的所有字符
从第3个移除移除了2个
14、 Replace() 返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串
指定字符串替换成e
15、Substring()截取字符串或者截取指定长度的字符串
从第5个截取,截取2个
16、String.Format
将指定字符串中的每个格式项替换为相应对象的值的等效文本。
静态的Format方法提供了创建嵌入变量字符串的便利方法。嵌入的变量可以是任意类型; 而Format 会直接调用它们的ToSting.
17、StringBuilder
StringBuilder类(System.Text命名空间) 表示个可变(可编辑)的字符串。使用StringBuilder,可以Append、Insert. Remove和Replace子字符串,而不需要替换整个StringBuilder.
StringBuilder的个普遍使用方法是通过重复调用Append来创建一个长字符串。这个方法比复杂连接普通字符串类型要高效得多。
15、分支结构一if
分支结构:分支是控制下一步要执行哪行代码的过程。要跳转到的代码行由某个条件语句来控制。这个条件语句使用布尔逻辑,对测试值和一个或多个可能的值进行比较。
if语句: if语句的功能比较多,是有效的决策方式。if语句最简单的语法如下:
if (
<code executed if
先执行
if (
<code executed if
else
<code executed if
可使用成对的花括号将这两段代码放在多个代码行上:
if (
<code executed if
else
<code executed if
16、分支结构二switch
例题:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace demo03
{
class Program
{
static void Main(string[] args)
{
int week;
while (true)
{
Console.WriteLine("请输入数字:");
int.TryParse(Console.ReadLine(), out week);//用户输入的值
if (week > 0)
{
switch (week)
{
case 1:
Console.WriteLine("星期一");
break;
case 2:
Console.WriteLine("星期二");
break;
case 3:
Console.WriteLine("星期三");
break;
case 4:
Console.WriteLine("星期四");
break;
case 5:
Console.WriteLine("星期五");
break;
case 6:
Console.WriteLine("星期六");
break;
case 7:
Console.WriteLine("星期七");
break;
default:
Console.WriteLine("请输入1-7的数字");
break;
}
}
else {
Console.WriteLine("请输入正确的数");
}
}
}
}
}
结果
小结
随堂小结:
switch分支结构,case后面是一个常量,并且是用冒号结束。case 下面代码执行完毕,必须要有break
default语句是不是必须要有的,如果前面的case都无法满足条件匹配,则最好有一个default语句来处理
ReadLine(用来接收用户在控制台上输入的数据
if与switch的区别
if(布尔值)不符合跳出,switch(各种类型)以下都匹配
17、循环结构一do while
循环就是重复执行语句。这个技术使用起来非常方便,因为可以对操作重复任意多次(数干次,甚至数百万次),而不必每次都编写相同的代码。循环的另一种重要类型是一直循环到给定的条件不满足为止结束。
do循环
do循环以下述方式执行:执行标记为循环的代码,然后进行一一个布尔测试,如果测试结果为true,就再次执行这段代码,并重复这个过程。当测试结果为false时,就退出循环。
do循环的结构如下:
do
while (
其中,计算
while循环
非常类似于do循环,但有一个明显区别: while循环中的布尔测试在循环开始时进行,而不是最后进行。如果测试结果为false,就不会执
行循环。程序会直接跳转到循环之后的代码。
while (
{}
小结:
do循环,while循环
区别: do循环是先执行循环体中的代码,再进行条件判断,条件为True的话则继续执行循环体。
while循环先判断条件,条件为True的话再执行循环体。
死循环:条件一直成立,无限循环下去。
18、循环结构二 for循环
for循环
这类循环可以执行指定的次数,并维护它自己的计数器。要定义for循环,需要下列信息:τ
1.初始化计数器变量的一个起始值。
2、继续循环的条件,应涉及计数器变量。
3、在每次循环的最后,对计数器变量执行一个操作。
如下所示:
for (
{
Foreach循环
循环的中断
有时需要更精细地控制循环代码的处理。C#为此提供了以下命令:
break--立即终止循环。
continue立 即终止当前的循环(继续执行下一次循环)。
return--跳出循环及包含该循环的函数
小结:
for循环,先初始化计数器(初始化语句只在循环开始的时候执行一次),再进行条件判断,条件成立的话,然后执行循环中的代
码段,执行结束后,计数器进行操作。
foreach使用in关键字,条件自动满足,不需要手动设置循环次数。
跳出循环: break 跳出循环体。continue 终止当前循环,直接执行下一次循环。
循环嵌套
使用哪个循环?
while
do while
for
学习使用嵌套循环
for(inti= 0;i< n; i++)
{
for(intj= 0;j< m;j++)
}
嵌套循环:外层循环执行一次,内层循环执行完整次数。
打印九九乘法表
static void Main(string[] args)
{
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write("{0}*{1}={2} \t", j, i, i * j);
}
Console.WriteLine();
}
Console.ReadKey();
}
19、?: ? ??
?:条件运算符或三元运算符
其语法如下:
b?x:y形式的条件表达式首先计算条件b。然后,如果b为true,则将计算x,并且它将成为运算结果。否则计算y,并且它成为运算结果。条件表达式从不同时计算x和y。
条件运算符向右关联,表示运算从右到左分组。例如,a ?b:c?d:e形式的表达式可以按a?b:(c ?d: e)进行计算。
?:运算符的第一个操作数必须是可以隐式转换为bool 的表达式,或是实现operator true的类型的表达式。如果两个要求都不满足,则发生编译时错误。
与if语句不同的是,if语句没有结果(所以不在赋值语句中使用它)。使用该语句是为了根据条件执行其他语句。
?可空修饰符
若要在数值类型中表示空值,必须使用特殊的结构即可空类型 (Nullable) 。可空类型是由数据类型 后加一个“?”表示的:
int? = null;
int? age, x = null, y = 3, z = 5;//允许为空
??运算符称为空合并运算符
a ?? b形式的空合并表达式要求a为可以为null的类型或引用类型。如果a为非null,则a ?? b的结果为a;否则,结果为b。仅当a为null时,该操作才计算b。
int? age, x = null, y = 3, z = 5;//允许为空
age = x ?? x ?? x ?? x ?? z ?? y ?? z;//遇到第一个为空的值停止输出,结果为5
空合井运算符为右结合运算符,表示操作从右向左进行组合。例如,a ?? b??c形式的表达式可以按a?? (b ?? c)进行计算。概括地说,E1 ?? E2 ?? ... ?? EN形式的表达式返回第一个非null的操作数,如果所有操作数都为null,则返回null.
20、数组类型
数组类型:
之前讲的类型有一个共同点:它们都只存储一个值。有时,需要存储许多数据,这样就会带来不便。有时需要同时存储几个类型相同的值,而不想为每个值使用不同的变量。
数组是一个变量的索引列表,存储在数组类型的变量中。在方括号中指定索引,即可访问该数组中的各个成员。这个索引是一个整数,第一个条目的索引是0,第二个条目的索引是1,依此类推。
数组有一个基本类型,数组中的各个条目都是这种类型。
以下述方式声明数组:
其中,
数组的初始化有两种方式。可以字面值形式指定数组的完整内容,也可以指定数组的大小,再使用关键字new初始化所有数组元素。
要使用字面值指定数组,只需提供一个用逗号分隔的元素值列表,该列表放在花括号中,例如: int[] myIntArray={5,9, 10,2,99 };其中,myIntArray有5个元素,每个元素都被赋予-个整数值。
另一种方式需要使用下述语法: int[] myIntArray = new int[5];
这里使用关键字new显式地初始化数组,用个常量值定义其大小。这种方式会给所有数组元素赋予同一一个默认值,对于数值类型来说,其默认值是0。
也可以使用非常量的变量来进行初始化,例如: int0 myIntArray = new int[arraySize];
还可以组合使用这两种初始化方式: int] myIntArray= new int[5] {5, 9, 10, 2, 99 }:使用这种方式,数组大小必须与元素个数相匹配。
二维数组
int[,] age = new int[3, 6]{ { 11,12,13,14,15,16},{ 21,22,23,24,25,26},{31,32,33,34,6,12}};
Console.WriteLine(age[1, 2]);//结果为23
21、枚举类型:
它们允许定义一个类型,其取值范围是用户提供的值的有限集合。
不是仅声明一个给定类型的变量,而是声明和描述一个用户定义的类型, 再声明这个新类型的变量。
定义枚举
用enum关键字定义枚举,如下所示:
enum
接着声明这个新类型的变量:
并赋值:
枚举使用一个基本类型来存储。枚举类型可取的每个值都存储为该基本类型的一个值,默认情况下该类型为int.
枚举的基本类型可以是byte. sbyte. short. ushort. int. uint. long和ulong.
namespace demo05
{
class Program
{
enum weekDay
{
Mon=1,
Tus,
Wed,
Thu,
Fri,
Sat,
Sun
}
static void Main(string[] args)
{
foreach (int val in Enum.GetValues(typeof(weekDay)))
{
Console.WriteLine(Enum.GetName(typeof(weekDay) , val));
Console.WriteLine(val);
}
Console.ReadKey();
}
}
}
22、
? 用3个关键字可以标记出能处理异常的代码和指令,如果发生异常,就使用这些指令处理异常。用于这个目的的3个关键字是try. catch和finaly.它们都有一个关联的代码块,必须在连续的代码行中使用。其基本结构如下:
try
{
}
catch (
<await methodName(e);>
finally
{
也可以只有try块和finally块,而没有catch块, 或者有一个try块和好几个catch块。如果有一个或多个catch块,finally块就是可选的, 否则就是必需的。这些代码块的用法如下:
try--包含抛出异常的代码 (在谈到异常时,C#语言用“抛出”这个术语表示“生成”或“导致”)。
catch--包含抛出异常时要执行的代码。 catch块可以使用
finally---包含始终会执行的代码, 如果没有产生异常,则在try块之后执行,如果处理了异常,就在catch块后执行。(如果没有catch块,就一定要有finally块) 。
代码
namespace demo06
{
class Program
{
static void Main(string[] args)
{
int[] age = { 16, 17, 18, 19, 20 };
while (true)
{
int index = int.Parse(Console.ReadLine());
try
{
Console.WriteLine(age[index]);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Console.ReadKey();
}
}
}