该菜单主要用于新建项目、打开现有项目以及保存项目等操作。
该菜单与 Word 软件中的编辑菜单类似,主要用于文件内容的复制、剪切、 保存、粘贴等操作。
常用的窗口包括解决方案资源管理器、服务器资源管理器、SQL Server 对象资源管理器、错误列表、输出、工具箱、属性窗口等。
该菜单主要在程序运行时调试使用。
该菜单在团队开发时使用。
该菜单用于连接到数据库、连接到服务器、选择工具箱中的工具等操作。
该菜单用于创建 UML 模型或关系图。
该菜单用于对程序进行测试。
该菜单用于分析程序的性能。
该菜单用于设置在 Visual Studio 2015 界面中显示的窗口,并提供了重置窗口的选项,方便用户重置 Visual Studio 2015 的操作界面。
值类型包括整型、浮点型、字符型、布尔型、枚举型等;
引用类型包括类、接口、数组、委托、字符串等。
类 型 | 取值范围 |
---|---|
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
运算符 | 说 明 |
---|---|
= | 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
变量的命名规则遵循 Camel 命名法,并尽量使用能描述变量作用的英文单词。例如存放学生姓名的变量可以定义成 name 或者 studentName 等。另外,变量名字也不建议过长, 最好是 1 个单词,最多不超过 3 个单词。
为了与变量有所区分,通常将定义常量的单词的所有字母大写。例如定义求圆面积的 n 的值,可以将其定义成一个常量以保证在整个程序中使用的值是统一的,直接定义成 PI 即可。
类的命名规则遵循 Pascal 命名法,即每个单词的首字母大写。例如定义一个存放学生信息的类,可以定义成 Student。
接口的命名规则也遵循 Pascal 命名法,但通常都是以 I 开头,并将其后面的每个单词的首字母大写。例如定义一个存放值比较操作的接口,可以将其命名为 ICompare。
方法的命名遵循 Pascal 命名法,一般采用动词来命名。例如实现添加用户信息操作的方法,可以将其命名为 AddUser。
语法形式如下。
if(布尔表达式)
{
语句块;
}
这里语句块是指多条语句。当布尔表达式中的值为 True 时执行语句块中的内容,否则不执行。
语法形式如下。
if(布尔表达式)
{
语句块 1;
}else{
语句块 2;
}if(布尔表达式)
{
语句块;
}
上面语句的执行过程是当 if 中的布尔表达式的结果为 True 时执行语句块 1,否则执行语句块 2。
语法形式如下。
if(布尔表达式 1)
{
语句块 1;
}else if(布尔表达式 2){
语句块 2;
}
...
else{
语句块 n;
}
上面语句的执行过程是先判断布尔表达式 1 的值是否为 True,如果为 True,执行语句块 1,整个语句结束,否则依次判断每个布尔表达式的值,如果都不为 True,执行 else 语句中的语句块 n。
在语法中最后一个 else{} 语句是可以省略的。如果省略了 else{} 语句,那么多分支的 if 语句中如果没有布尔表达式的值为 True 的语句,则不会执行任何语句块。
语法形式如下。
switch(表达式)
{
case 值 1:
语句块 1;
break;
case 值 2:
语句块 2;
break;
...
default:
语句块 n;
break;
}
switch 语句中表达式的结果必须是整型、字符串类型、字符型、布尔型等数据类型。
如果 switch 语句中表达式的值与 case 后面的值相同,则执行相应的 case 后面的语句块。
如果所有的 case 语句与 switch 语句表达式的值都不相同,则执行 default 语句后面的值。
default 语句是可以省略的。需要注意的是,case 语句后面的值是不能重复的。
语法形式如下。
for(表达式 1; 表达式 2; 表达式3)
{
表达式 4;
}
//提示:在 for 循环中表达式 1、表达式 2、表达式 3 以及表达式 4 都是可以省略的
//但表达式 1、表达式 2、表达式 3 省略时它们之间的分号是不能省略的。
语法形式如下。
while(布尔表达式)
{
语句块;
}
while 语句执行的过程是,当 while 中布尔表达式的结果为 True 时,执行语句块中的内容,否则不执行。通常使用 for 循环可以操作的语句都可以使用 while 循环完成。
语法形式如下。
do
{
语句块;
}while(布尔表达式);
do while 语句执行的过程是,先执行 do{} 中语句块的内容,再判断 while() 中布尔表达式的值是否为 True,如果为 True,则继续执行语句块中的内容,否则不执行,因此 do while 语句中的语句块至少会执行一次。
break 语句用于中断循环,使循环不再执行。
如果是多个循环语句嵌套使用,则 break 语句跳出的则是最内层循环。
continue 语句有点像 break 语句。
但它不是强制终止,continue 会跳过当前循环中的代码,强制开始下一次循环。
continue 语句必须在循环语句中使用。
goto 语句用于直接在一个程序中转到程序中的标签指定的位置,标签实际上由标识符加上冒号构成。
语法形式如下。
goto Labell;
语句块 1;
Labell
语句块 2;
如果要跳转到某一个标签指定的位置,直接使用 goto 加标签名即可。
语句中使用了 goto 语句后,语句的执行顺序发生了变化,即先执行语句块 2,再执行语句块 1。
goto 语句不能跳转到循环语句中,也不能跳出类的范围。
由于 goto 语句不便于程序的理解,因此 goto 语句并不常用。
字符串操作中常用的属性或方法如下表所示。
编号 | 属性或方法名 | 作用 |
---|---|---|
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 位无符号整数类型。 |
隐式数值转换包括以下几种:
从 int,uint 或 long 到 float 以及从 long 到 double 的转换可能会导致精度下降,但决不会引起数量上的丢失。
强制类型转换的语法如下。
数据类型变量名 = (数据类型) 变量名或值;
//等号左、右两边的数据类型是一致的。
语法形式如下。
数据类型 变量二数据类型.Parse(字符串类型的值);
//等号左、右两边的数据类型兼容。
语法形式如下。
数据类型 变量名 = 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) |
正则表达式是专门处理字符串操作的,其本身有固定的写法。
正则表达式的符号主要分为元字符和表示重复的字符,分别如下表所示
正则表达式中的元字符
编号 | 字符 | 描述 |
---|---|---|
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] | 匹配字符串中的双字节字符(包括汉字) |
语法形式如下。
//定义数组
数据类型[] 数组名;
//初始化数组中的元素
数据类型[] 数组名 = new 数据类型[长度];
数据类型[] 数组名 = {值 1, 值 2, ...}
数据类型[] 数组名 = new 数据类型[长度]{值 1,值 2,...}
多维数组的语法形式如下。
//定义多维数组
数据类型[ , , ...] 数组名;
//创建多维数组并初始化
数据类型[ , , ...] 数组名 = new 数据类型[m,n,...] {{ , , ...},{ , , ...}};
锯齿型数组的语法形式如下。
数据类型[][] 数组名 = new 数据类型[数组长度][];
数组名[0] = new 数据类型[数组长度];
foreach 语句遍历数组中的元素,具体的语法形式 如下。
foreach(数据类型 变量名 in 数组名)
{
//语句块;
}
使用 Split 方法时,需要注意该方法中传递的参数 (condition, StringSplitOptions.None)。
第一个参数是拆分的条件数组,可以在该数组中存放多个字符串作为拆分的条件。
第二个 参数 StringSplitOptions.None 是拆分的选项,表示如果在拆分时遇到空字符也拆分出一个元素。
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 变量名 : 数据类型
{
值l,
值2,
}
访问修饰符:
与类成员的访问修饰符一样,省略访问修饰符也是代表使用 private 修饰符的。
数据类型:
指枚举中值的数据类型。只能是整数类型,包括 byte、short、int、long 等。
值1、值2、……:
在枚举类型中显示的值。但实际上每个值都被自动赋予了一个整数类型值,并且值是递增加 1 的,默认是从 0 开始的,也就是值 1 的值是 0、值 2 的值是 1。
结构体与类比较相似,由于它是值类型,在使用时会比使用类存取的速度更快,但灵活性方面没有类好。结构体从字面上来理解是指定义一种结构,实际上结构体是一种与类的定义非常相似的数据类型,但它是值类型。结构体的定义位置与枚举类型一样,都是在类中定义或者在命名空间下定义,而不能将其定义到方法中。
定义的语法形式如下。
访问修饰符 struct 结构体名称
{
//结构体成员
}
访问修饰符:
通常使用 public 或者省略不写,如果省略不写,代表使用 private 来修饰。
如果结构体中的内容要被其他类中的成员访问,需要将其访问修饰符设置为 public。
结构体名称:
命名规则通常和变量的命名规则相同,即从第二个单词开始每个单词的首字母大写。
结构体成员:
包括字段、属性、方法以及后面要介绍的事件等。
结构体 | 类 |
---|---|
允许不使用new对其实例化 | 必须使用new实例化 |
没有默认构造方法 | 有默认构造方法 |
不能继承类 | 能继承类 |
没有析构方法 | 有析构方法 |
不允许使用abstract、protected以及sealed修饰 | 允许使用abstract、protected以及sealed修饰 |
1-9 ↩︎
A-Za-z ↩︎