【C#教程:C#入门经典】第一部分

C#教程:C#入门经典(第一部分)

VS 编辑器

菜单栏中常用 的功能。

1) 文件

该菜单主要用于新建项目、打开现有项目以及保存项目等操作。

2) 编辑

该菜单与 Word 软件中的编辑菜单类似,主要用于文件内容的复制、剪切、 保存、粘贴等操作。

3) 视图

常用的窗口包括解决方案资源管理器、服务器资源管理器、SQL Server 对象资源管理器、错误列表、输出、工具箱、属性窗口等。

  • 解决方案资源管理器用于管理在 Visual Studio 2015 中创建的项目。
  • 服务器资源管理器用于管理数据库连接、移动服务、应用服务等。
  • SQL Server 对象资源管理器用于管理 Visual Studio 2015 中自带或其他的 SQL Server 数据库。
  • 错误列表窗口用于显示程序在编 译或运行后出现的错误信息。
  • 输出窗口用于显示在程序中的输出信息。
  • 工具箱窗口用于显示在 Windows 窗体应用程序或 WPF 应用程序、网站应用程序中可以使用的控件。
  • 属性窗口则用于设置项目或程序中使用的所有控件等内容的属性。
4) 调试

该菜单主要在程序运行时调试使用。

5) 团队

该菜单在团队开发时使用。

6) 工具

该菜单用于连接到数据库、连接到服务器、选择工具箱中的工具等操作。

7) 体系结构

该菜单用于创建 UML 模型或关系图。

8) 测试

该菜单用于对程序进行测试。

9) 分析

该菜单用于分析程序的性能。

10) 窗口

该菜单用于设置在 Visual Studio 2015 界面中显示的窗口,并提供了重置窗口的选项,方便用户重置 Visual Studio 2015 的操作界面。

C#基础语法

数据类型

值类型和引用类型

值类型包括整型、浮点型、字符型、布尔型、枚举型等;

引用类型包括类、接口、数组、委托、字符串等。

整型
类 型 取值范围
sbyte 有符号数,占用1个字节,-27〜27-1
byte 无符号数,占用1个字节,0〜28-1
short 有符号数,占用2个字节,-215〜215-1
ushort 无符号数,占用2个字节,0〜216-1
int 有符号数,占用4个字节,-231〜231-1
uint 无符号数,占用4个字节,0〜232-1
long 有符号数,占用8个字节,-263〜263-1
ulong 无符号数,占用8个字节,0〜264-1
浮点型
类 型 取值范围
float 单精度浮点型,占用4个字节,最多保留7位小数
double 双精度浮点型,占用8个字节,最多保留16位小数
字符型和字符串类型

字符型:用 char 关键字表示;例如 ‘a’、‘中’ 等。

符串类型:用 string 关键字表示;例如 “abc”、“123” 等。

转义字符 等价字符
单引号
" 双引号
\ 反斜杠
\0
\a 警告(产生蜂鸣音)
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
布尔类型

布尔类型:用 bool 来声明;它只有两个值,即 true 和 false。

算术运算符

运算符 说 明
+ 对两个操作数做——加法运算
- 对两个操作数做——减法运算
* 对两个操作数做——乘法运算
/ 对两个操作数做——除法运算
% 对两个操作数做——取余运算
逻辑运算符
运算符 含义 说明
&& 逻辑与 如果运算符两边都为 True,则整个表达式为 True,否则为 False;如果左边操作数为 False,则不对右边表达式进行计算,相当于“且”的含义
|| 逻辑或 如果运算符两边有一个或两个为 True,整个表达式为 True,否则为 False;如果左边为 True,则不对右边表达式进行计算,相当于“或”的含义
! 逻辑非 表示和原来的逻辑相反的逻辑
比较运算符
运算符 说 明
== 表示两边表达式运算的结果相等,注意是两个等号
!= 表示两边表达式运算的结果不相等
> 表示左边表达式的值大于右边表达式的值
< 表示左边表达式的值小于右边表达式的值
>= 表示左边表达式的值大于等于右边表达式的值
<= 表示左边表达式的值小于等于右边表达式的值
位运算符
运算符 说 明
& 按位与。两个运算数都为 1,则整个表达式为 1,否则为 0;也可以对布尔型的值进行比较,相当于“与”运算,但不是短路运算
| 按位或。两个运算数都为 0,则整个表达式为 0,否则为 1;也可以对布尔型的值进行比较,相当于“或”运算,但不是短路运算
~ 按位非。当被运算的值为 1 时,运算结果为 0;当被运算的值为 0 时,运算结果为 1。该操作符不能用于布尔型。对正整数取反,则在原来的数上加 1,然后取负数;对负整数取反,则在原来的数上加 1,然后取绝对值
^ 按位异或。只有运算的两位不同结果才为 1,否则为 0
<< 左移。把运算符左边的操作数向左移动运算符右边指定的位数,右边因移动空出的部分 补 0
>> 有符号右移。把运算符左边的操作数向右移动运算符右边指定的位数。如果是正值,左侧因移动空出的部分补 0;如果是负值,左侧因移动空出的部分补 1
>>> 无符号右移。和 >> 的移动方式一样,只是不管正负,因移动空出的部分都补 0
三元运算符

语法形式:布尔表达式 ? 表达式 1: 表达式 2

  • 布尔表达式:判断条件,它是一个结果为布尔型值的表达式。
  • 表达式 1:如果布尔表达式的值为 True,该三元运算符得到的结果就是表达式 1 的运算结果。
  • 表达式 2:如果布尔表达式的值为 False,该三元运算符得到的结果就是表达式 2 的运算结果。
赋值运算符
运算符 说 明
= x=y,等号右边的值给等号左边的变量,即把变量 y 的值赋给变量 x
+= x+=y,等同于 x=x+y
-= x-=y,等同于 x=x-y
*= x*=y,等同于 x=x*y
/= x/=y,等同于 x=x/y
%= x%=y,等同于 x=x%y,表示求 x 除以 y 的余数
++ x++ 或 ++x,等同于 x=x+1
x-- 或 --x,等同于 x=x-1
运算符的优先级
运算符 结合性
.(点)、()(小括号)、[](中括号) 从左到右
+ (正)、-(负)、++ (自增)、–(自减)、~(按位非)、!(逻辑非) 从右到左
* (乘)、/ (除)、% (取余) 从左向右
+ (加)、-(减) 从左向右
<<、>>、>>> 从左向右
<、<=、>、>= 从左向右
==、!= 从左向右
& 从左向右
| 从左向右
^ 从左向右
&& 从左向右
|| 从左向右
?: 从右到左
=、+=、-=、*=、/=、%=、&=、|=、^=、~=、<<=、>>=、>>>= 从右到左

变量

定义——数据类型 变量名;例:int num;

赋值——数据类型 变量名 = 值; 例:int a = 1,

常量

定义——const 数据类型 常量名 = 值;例:const double PI = 3.14;;

赋值——常量在第一次被赋值后值就不能再改变;

命名规范

命名方法有两种:一种是 Pascal 命名法(帕斯卡命名法),另一种是 Camel 命名法(驼峰命名法)。

Pascal 命名法是指每个单词的首字母大写;例:ButtonLeft

Camel 命名法是指第一个单词小写,从第二个单词开始每个单词的首字母大写。例:buttonLeft

1) 变量的命名:Camel 命名法

变量的命名规则遵循 Camel 命名法,并尽量使用能描述变量作用的英文单词。例如存放学生姓名的变量可以定义成 name 或者 studentName 等。另外,变量名字也不建议过长, 最好是 1 个单词,最多不超过 3 个单词。

2) 常量的命名:单词的所有字母大写

为了与变量有所区分,通常将定义常量的单词的所有字母大写。例如定义求圆面积的 n 的值,可以将其定义成一个常量以保证在整个程序中使用的值是统一的,直接定义成 PI 即可。

3) 类的命名:Pascal 命名法

类的命名规则遵循 Pascal 命名法,即每个单词的首字母大写。例如定义一个存放学生信息的类,可以定义成 Student。

4) 接口的命名:以 I 开头+ Pascal 命名法

接口的命名规则也遵循 Pascal 命名法,但通常都是以 I 开头,并将其后面的每个单词的首字母大写。例如定义一个存放值比较操作的接口,可以将其命名为 ICompare。

5) 方法的命名:采用动词来命名,结合Pascal 命名法

方法的命名遵循 Pascal 命名法,一般采用动词来命名。例如实现添加用户信息操作的方法,可以将其命名为 AddUser。

if else语句

单一条件的 if 语句

语法形式如下。

if(布尔表达式)
{
  语句块;
}

这里语句块是指多条语句。当布尔表达式中的值为 True 时执行语句块中的内容,否则不执行。

二选一条件的 if 语句

语法形式如下。

if(布尔表达式)
{
  语句块 1;
}else{
  语句块 2;
}if(布尔表达式)
{
  语句块;
}

上面语句的执行过程是当 if 中的布尔表达式的结果为 True 时执行语句块 1,否则执行语句块 2。

多选一条件的 if 语句

语法形式如下。

if(布尔表达式 1)
{
  语句块 1;
}else if(布尔表达式 2){
  语句块 2;
}
...
else{
  语句块 n;
}

上面语句的执行过程是先判断布尔表达式 1 的值是否为 True,如果为 True,执行语句块 1,整个语句结束,否则依次判断每个布尔表达式的值,如果都不为 True,执行 else 语句中的语句块 n。

在语法中最后一个 else{} 语句是可以省略的。如果省略了 else{} 语句,那么多分支的 if 语句中如果没有布尔表达式的值为 True 的语句,则不会执行任何语句块。

switch case语句

语法形式如下。

switch(表达式)
{
    case 值 1:
        语句块 1;
        break;
    case 值 2:
        语句块 2;
        break;
        ...
    default:
        语句块 n;
        break;
}

switch 语句中表达式的结果必须是整型、字符串类型、字符型、布尔型等数据类型。

如果 switch 语句中表达式的值与 case 后面的值相同,则执行相应的 case 后面的语句块。

如果所有的 case 语句与 switch 语句表达式的值都不相同,则执行 default 语句后面的值。

default 语句是可以省略的。需要注意的是,case 语句后面的值是不能重复的。

for循环

语法形式如下。

for(表达式 1; 表达式 2; 表达式3)
{
    表达式 4;
}
//提示:在 for 循环中表达式 1、表达式 2、表达式 3 以及表达式 4 都是可以省略的
//但表达式 1、表达式 2、表达式 3 省略时它们之间的分号是不能省略的。
  • 表达式 1:为循环变量赋初值。
  • 表达式 2:为循环设置循环条件,通常是布尔表达式。
  • 表达式 3:用于改变循环变量的大小。
  • 表达式 4:当满足循环条件时执行该表达式 4。

while循环

语法形式如下。

while(布尔表达式)
{
    语句块;
}

while 语句执行的过程是,当 while 中布尔表达式的结果为 True 时,执行语句块中的内容,否则不执行。通常使用 for 循环可以操作的语句都可以使用 while 循环完成。

do while循环

语法形式如下。

do
{
    语句块;
}while(布尔表达式);

do while 语句执行的过程是,先执行 do{} 中语句块的内容,再判断 while() 中布尔表达式的值是否为 True,如果为 True,则继续执行语句块中的内容,否则不执行,因此 do while 语句中的语句块至少会执行一次。

break语句

break 语句用于中断循环,使循环不再执行。

如果是多个循环语句嵌套使用,则 break 语句跳出的则是最内层循环。

continue语句

continue 语句有点像 break 语句。

但它不是强制终止,continue 会跳过当前循环中的代码,强制开始下一次循环。

continue 语句必须在循环语句中使用。

goto语句

goto 语句用于直接在一个程序中转到程序中的标签指定的位置,标签实际上由标识符加上冒号构成。

语法形式如下。

goto Labell;
    语句块 1;
Labell
    语句块 2;

如果要跳转到某一个标签指定的位置,直接使用 goto 加标签名即可。

语句中使用了 goto 语句后,语句的执行顺序发生了变化,即先执行语句块 2,再执行语句块 1。

goto 语句不能跳转到循环语句中,也不能跳出类的范围。

由于 goto 语句不便于程序的理解,因此 goto 语句并不常用。

C#字符串

常用的属性或方法

字符串操作中常用的属性或方法如下表所示。

编号 属性或方法名 作用
1 Length 获取字符串的长度,即字符串中字符的个数
2 IndexOf 返回整数,得到指定的字符串在原字符串中第一次出现的位置
3 LastlndexOf 返回整数,得到指定的字符串在原字符串中最后一次出现的位置
4 Starts With 返回布尔型的值,判断某个字符串是否以指定的字符串开头
5 EndsWith 返回布尔型的值,判断某个字符串是否以指定的字符串结尾
6 ToLower 返回一个新的字符串,将字符串中的大写字母转换成小写字母
7 ToUpper 返回一个新的字符串,将字符串中的小写字母转换成大写字母
8 Trim 返回一个新的字符串,不带任何参数时表示将原字符串中前后的空格删除。 参数为字符数组时表示将原字符串中含有的字符数组中的字符删除
9 Remove 返回一个新的字符串,将字符串中指定位置的字符串移除
10 TrimStart 返回一个新的字符串,将字符串中左侧的空格删除
11 TrimEnd 返回一个新的字符串,将字符串中右侧的空格删除
12 PadLeft 返回一个新的字符串,从字符串的左侧填充空格达到指定的字符串长度
13 PadRight 返回一个新的字符串,从字符串的右侧填充空格达到指定的字符串长度
14 Split 返回一个字符串类型的数组,根据指定的字符数组或者字符串数组中的字符 或字符串作为条件拆分字符串
15 Replace 返回一个新的字符串,用于将指定字符串替换给原字符串中指定的字符串
16 Substring 返回一个新的字符串,用于截取指定的字符串
17 Insert 返回一个新的字符串,将一个字符串插入到另一个字符串中指定索引的位置
18 Concat 返回一个新的字符串,将多个字符串合并成一个字符串

数据类型转换

方法 描述
ToBoolean 如果可能的话,把类型转换为布尔型。
ToByte 把类型转换为字节类型。
ToChar 如果可能的话,把类型转换为单个 Unicode 字符类型。
ToDateTime 把类型(整数或字符串类型)转换为 日期-时间 结构。
ToDecimal 把浮点型或整数类型转换为十进制类型。
ToDouble 把类型转换为双精度浮点型。
ToInt16 把类型转换为 16 位整数类型。
ToInt32 把类型转换为 32 位整数类型。
ToInt64 把类型转换为 64 位整数类型。
ToSbyte 把类型转换为有符号字节类型。
ToSingle 把类型转换为小浮点数类型。
ToString 把类型转换为字符串类型。
ToType 把类型转换为指定类型。
ToUInt16 把类型转换为 16 位无符号整数类型。
ToUInt32 把类型转换为 32 位无符号整数类型。
ToUInt64 把类型转换为 64 位无符号整数类型。

隐式类型转换

隐式数值转换包括以下几种:

  • 从 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 类型。

从 int,uint 或 long 到 float 以及从 long 到 double 的转换可能会导致精度下降,但决不会引起数量上的丢失。

强制类型转换

强制类型转换的语法如下。

数据类型变量名 = (数据类型) 变量名或值;
//等号左、右两边的数据类型是一致的。

Parse方法:字符串类型转换

语法形式如下。

数据类型   变量二数据类型.Parse(字符串类型的值);
//等号左、右两边的数据类型兼容。

Convert方法:数据类型转换

语法形式如下。

数据类型  变量名 = convert.To数据类型(变量名);
//Convert.To 后面的数据类型要与等号左边的数据类型相匹配。

Convert 类常用的类型转换方法如下表所示。

方法 说明
Convert.ToInt16() 转换为整型(short)
Convert.ToInt32() 转换为整型(int)
Convert.ToInt64() 转换为整型(long)
Convert.ToChar() 转换为字符型(char)
Convert.ToString() 转换为字符串型(string)
Convert.ToDateTime() 转换为日期型(datetime)
Convert.ToDouble() 转换为双精度浮点型(double)
Conert.ToSingle() 转换为单精度浮点型(float)

正则表达式(Regex类)

正则表达式是专门处理字符串操作的,其本身有固定的写法。

正则表达式的符号主要分为元字符和表示重复的字符,分别如下表所示

正则表达式中的元字符

编号 字符 描述
1 . 匹配除换行符以外的所有字符
2 \w 匹配字母、数字、下画线
3 \s 匹配空白符(空格)
4 \d 匹配数字
5 \b 匹配表达式的开始或结束
6 ^ 匹配表达式的开始
7 $ 匹配表达式的结束

正则表达式中表示重复的字符

编 号 字 符 描 述
1 * 0次或多次字符
2 ? 0次或1次字符
3 + 1次或多次字符
4 {n} n次字符
5 {n,M} n到M次字符
6 {n, } n次以上字符

Regex 类中提供了很多方法来操作正则表达式

字符 描述
\ 转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来
(pattern) 匹配 pattern 并获取这一匹配
(?:pattern) 匹配 pattern 但不获取匹配结果
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串
(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串
x|y 匹配x或y。例如,‘z|food’能匹配“z”或“food”。‘(z|f)ood’则匹配“zood”或“food”
[xyz] 字符集合。匹配所包含的任意一个字符。例如,‘[abc]’可以匹配“plain”中的‘a’
[^xyz] 负值字符集合。匹配未包含的任意字符。例如,‘[^abc]’可以匹配“plain”中的‘p’
[a-z] 匹配指定范围内的任意字符。例如,‘[a-z]’可以匹配’a’到’z’范围内的任意小写字母字符
[^a-z] 匹配不在指定范围内的任意字符。例如,‘[^a-z]’可以匹配不在‘a’~‘z’'内的任意字符
\B 匹配非单词边界
\D 匹配一个非数字字符,等价于 [^0-9]
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\S 匹配任何非空白字符
\t 匹配一个制表符
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK
\W 匹配任何非单词字符。等价于‘[^A-Za-z0-9_]’

常用的正则表达式,如下表所示。

编号 正则表达式 作用
1 \d{15}|\d{18} 验证身份证号码(15位或18位)
2 \d{3}-\d{8}|\d{4}-\d{7} 验证国内的固定电话(区号有3位或4位,并在区号和电话号码之 间加上-)
3 1\d*$ 验证字符串中都是正整数
4 ^-[1-9]\d*$ 验证字符串中都是负整数
5 ^-?[1-9]\d*$ 验证字符串中是整数
6 2+$ 验证字符串中全是字母
7 A[A-Za-z0-9]+$ 验证字符串由数字和字母构成
8 [\u4e00-\u9fa5] 匹配字符串中的中文
9 [^\x00-\xff] 匹配字符串中的双字节字符(包括汉字)

C#数组

一维数组

语法形式如下。

//定义数组
数据类型[]  数组名;

//初始化数组中的元素
数据类型[]  数组名 = new  数据类型[长度];
数据类型[]  数组名 = {值 1, 值 2, ...}
数据类型[]  数组名 = new  数据类型[长度]{值 1,值 2,...}

多维数组

多维数组的语法形式如下。

//定义多维数组
数据类型[ , , ...]  数组名;

//创建多维数组并初始化
数据类型[ , , ...]   数组名 = new  数据类型[m,n,...]  {{ , , ...},{ , , ...}};

锯齿型数组的语法形式如下。

数据类型[][]  数组名 = new 数据类型[数组长度][];
数组名[0] = new 数据类型[数组长度];

foreach循环用法详解

foreach 语句遍历数组中的元素,具体的语法形式 如下。

foreach(数据类型  变量名  in  数组名)
{
    //语句块;
}

Split:将字符串拆分为数组

使用 Split 方法时,需要注意该方法中传递的参数 (condition, StringSplitOptions.None)。

第一个参数是拆分的条件数组,可以在该数组中存放多个字符串作为拆分的条件。

第二个 参数 StringSplitOptions.None 是拆分的选项,表示如果在拆分时遇到空字符也拆分出一个元素。

冒泡排序(Sort方法)

class Program
{
    static void Main(string[] args)
    {
        int[] a = { 5, 1, 7, 2, 3 };
        for(int i = 0; i < a.Length; i++)
        {
            for(int j = 0; j < a.Length - i - 1; j++)
            {
                if (a[j] > a[j + 1])
                {
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
        Console.WriteLine("升序排序后的结果为:");
        foreach(int b in a)
        {
            Console.Write(b + "");
        }
        Console.WriteLine();
    }
}

数组中常用的方法如下表所示。

编号 方法 描述
1 Clear() 清空数组中的元素
2 Sort() 冒泡排序,从小到大排序数组中的元素
3 Reverse() 将数组中的元素逆序排列
4 IndexOf() 查找数组中是否含有某个元素,返回该元素第一次出现的位置,如果没有与之匹配的元素,则返回 -1
5 LastIndexOf() 查找数组中是否含有某个元素,返回该元素最后一次出现的位置

enum:枚举类型

枚举类型在定义时使用 enum 关键字表示,枚举类型的定义与类成员的定义是一样的,或者直接定义在命名空间中。注意不能直接将枚举类型定义到方法中。

定义枚举类型的变量的语法形式如下。

访问修饰符 enum 变量名 : 数据类型
{
  值l,
  值2,
}
访问修饰符:
与类成员的访问修饰符一样,省略访问修饰符也是代表使用 private 修饰符的。

数据类型:
指枚举中值的数据类型。只能是整数类型,包括 byte、short、int、long 等。

值1、值2、……:
在枚举类型中显示的值。但实际上每个值都被自动赋予了一个整数类型值,并且值是递增加 1 的,默认是从 0 开始的,也就是值 1 的值是 0、值 2 的值是 1。

struct:结构体类型

结构体与类比较相似,由于它是值类型,在使用时会比使用类存取的速度更快,但灵活性方面没有类好。结构体从字面上来理解是指定义一种结构,实际上结构体是一种与类的定义非常相似的数据类型,但它是值类型。结构体的定义位置与枚举类型一样,都是在类中定义或者在命名空间下定义,而不能将其定义到方法中。

定义的语法形式如下。

访问修饰符  struct  结构体名称
{
    //结构体成员
}
访问修饰符:
通常使用 public 或者省略不写,如果省略不写,代表使用 private 来修饰。
如果结构体中的内容要被其他类中的成员访问,需要将其访问修饰符设置为 public。

结构体名称:
命名规则通常和变量的命名规则相同,即从第二个单词开始每个单词的首字母大写。

结构体成员:
包括字段、属性、方法以及后面要介绍的事件等。
结构体与类的比较
结构体
允许不使用new对其实例化 必须使用new实例化
没有默认构造方法 有默认构造方法
不能继承类 能继承类
没有析构方法 有析构方法
不允许使用abstract、protected以及sealed修饰 允许使用abstract、protected以及sealed修饰

  1. 1-9 ↩︎

  2. A-Za-z ↩︎

你可能感兴趣的:(小白,游戏,unity,c#)