基础笔记汇总.docx
《基础笔记汇总.docx》由会员分享,可在线阅读,更多相关《基础笔记汇总.docx(37页珍藏版)》请在冰豆网上搜索。
基础笔记汇总
一.简介
1.命名规范:
(1)Pascal风格:
多个英文单词时,每个英语单词的首字母要大写
(2)Camel风格:
包含一个或者多个单词时,每个英语单词首字母要小写
参数和变量使用Camel风格,其他都用Pascal风格
2.控制台应用程序:
类似DOS窗口那样,以console命令方式运行的程序
Console.writeline(“XJTloveMH”);//输出:
XJTloveMH
Console.readyok();//暂停运行结果,按任意键结束。
3.Windows窗体应用程序:
各种客户端程序,有很好的人机交互界面,基于C/S架构的程序
二.数据类型
2.1值类型
2.2引用类型
2.3指针类型
2.1值类型:
(1)整数类型
有符号sbyteshortintlong
无符号byteushortuintulong
左----》右可以转换(小----》大转换)
(2)浮点数类型(带小数部分的数值)
单精度(float)浮点类型
双精度(double)浮点类型
若对于浮点数没有进行任何明确的声明,默认是double类型。
要是强制将其制定为float类型,要在后面加上字符“F”或“f”
(3)字符类型(char)
字符串类型(string)
字符常量是用单引号括起来一个字符。
将字符放在双引号里,编译器会把它看做字符串。
转义字符:
(4)decimal类型(十进制decimal类型)
为了适应高精度的财务和货币计算的需求,C#提供了十进制decimal类型。
要把数字定义为decimal类型,而不是double或float或者整数类型,可以在数字后加字符“M”或“m”。
(5)布尔类型(bool),用来表示“真”或者“假”的逻辑数据类型。
只有2种取值,真(true)或者假(false)。
例子:
计算圆的面积
usingSystem;
using
usingSystem.Linq;
usingSystem.Text;
using
namespacecircle
{
classProgram
{
staticvoidMain(string[]args)
{
decimalpi=3.14159m;
intr=12;
decimals=0;
s=pi*r*r;
Console.WriteLine("圆的半径是:
={0}\n圆的面积是:
={1}",r,s);
//{0}和{1}是占位符,将r和s的结果显示在{0}和{1}的位置显示
Console.ReadKey();//控制台暂停符合,暂停运行结果
Console.ReadLine();
}
}
}
2.2引用类型:
(用来描述结构复杂,抽象能力比较强的数据。
与值类型是相并列的。
)
同为引用型的2个变量可以指向同一个对象,也可以针对同一个变量产生作用,或被其他同类型的变量所影响。
字符串,类,接口,委托,数组都是引用型变量。
(1)字符串:
(由放在一对双引号中的多个字符组成的一个串。
)
看做字符组成的数组。
使用string来声明字符串变量。
数据类型之间的转换:
A.隐式转换:
(1)数值类型之间的隐式转换
小到大可以转换,转换可能导致精度丢失,但不影响数量级。
不能大到小转换。
(2)var类型数据隐式转换:
Var定义的变量的数据类型由赋值的数据决定。
Eg:
varname=“XJT”,这时候name就是字符串类型,隐式转换。
Varname=250,这时候name就是int类型,进行了隐式转换。
B.显示转换:
(强制类型转换)要用户明确指定转换的类型。
C.使用convert类来转换:
(是一种隐式转换)
D.数值和字符串之间的转换:
(1)ToString()方法:
数值类型的ToString()方法可以将数值型数据转换为字符串。
==========变量名.ToString()==========
eg:
intn=10;
stringm=n.ToString();//变量名.ToString(),这个变量名哟和前面声明的变
量名保持一致
(2)Parse()方法:
数值类型的的Parse()方法可以将字符串转换为数值型。
=========数值类型.parse(变量名)==========
eg:
stringm=”XJT”;
Intn=int.Parse(m);//数值类型.parse(变量名),这个数值类型要和新声明
的变量类型保持一致。
转换的例子:
usingSystem;
using
usingSystem.Linq;
usingSystem.Text;
using
using
namespacecharge
{
classProgram
{
staticvoidMain(string[]args)
{
doublei=3.1415926;
ints=(int)i;//强制将double型的i转换为int型的s
doubles1=Convert.ToInt32(s);//整型s隐式转换为double型的s1
stringm=;
intn=int.Parse(m);//字符串m,转换为int型数值n
inta=1000;
stringb=a.ToString();//int型a,转换为字符串b
Console.WriteLine(s1);
Console.WriteLine(n);
Console.WriteLine(b);
//MessageBox.Show(s1.ToString());//MessageBox.Show输出的是一个text的字符串,所以要讲int型的s1转换为字符串
Console.ReadKey();
}
}
}
//转换时,小---》大ok不能大---》小
E.装箱和拆箱:
(数据转换类型的一种特许应用)
装箱是将“值”类型转换成“引用”类型(数值----》字符串是其一种表现)
拆箱是将“引用”类型转换成“值”类型。
(字符串----》数值是其一种表现)
封箱和拆箱的例子:
usingSystem;
using
usingSystem.Linq;
usingSystem.Text;
using
namespace_3.khlx
{
classProgram
{
staticvoidMain(string[]args)
{
intx=100;
objectobj=x;
Console.WriteLine("x的初始值为{0},装箱后的值为{1}",x,obj.ToString());
//封箱:
将数值转换为字符串
inty=(int)obj;
Console.WriteLine("引用类型的值为{0},拆箱后的值为{1}",obj.ToString(),y);
//拆箱:
将字符串转换为数值。
Console.ReadKey();
}
}
}
值类型变量和引用类型变量的使用区别:
值类型变量不需要用new关键字类分配内存,定义完就可以直接使用,引用类型变量则需要为其赋值后,才能使用。
值类型变量,在定义后就完成了内存的分配,引用类型,在定义后,没有为其分配内存,必须显式用new关键字来为其分配内存。
三.变量和常量
3.1变量
在程序执行过程中,不段变化的量值
1)变量的命名:
变量名必须以“字母或下划线“开头,只能由字母、数字、和下划线组成。
变量名不能包含空格、标点符号、运算符字符。
变量名不能与C#中的关键字、运算符或函数名同名。
使用多个单词组成变量名时,使用骆驼命名法(camelCase),即第一个单词的首字母小写,其他单词的首字母大写。
2)变量的声明和赋值
变量的声明语法如下:
{访问修饰符}{变量修饰符}变量的数据类型变量名表;
访问修饰符和变量修饰符可以省略。
Privateintx=10;
Intx=3,y=4;
3)隐式类型的局部变量(匿名变量)
使用关键字var来声明,可以用var来声明任何类型的局部变量,它只负责告诉编
译器,该变量需要根据初始化表达式来推断变量类型,而且只能是局部变量。
隐式类型的局部变量的语法如下:
Var变量名称=变量值;
Vari=8;//定义局部变量i;i作为整数型数据被编译。
3.2常量:
程序运行过程中,值不发送改变的变量
常量的声明语法如下:
[访问修饰符]const类型常量表达式;
Constintmonth=12;
(1)变量前加const关键字,就可以将该变量声明为常量。
(2)变量实际上代表的是数据真实的存储位置,变量的类型决定了它的存储的数值。
先
给变量声明类型后才能赋值。
四.运算符与表达式
4.1运算符:
表示各种不同运算的符号。
自加运算符:
前置自加:
x=++y;计算过程是y=y+1;x=y;
后置自加:
X=y++;计算过程是x=y;y=y+1;
前置自减:
x=y--;计算过程是y=y-1;x=y;
后置自减:
X=y--;计算过程是x=y;y=y-1;
其他运算符:
(1)条件运算符
结构:
(操作数1?
操作数2,操作数3)
如果操作数1是真,输出操作数2,如果操作数1是假,输出操作数3
(2)()运算符
用于指定操作数中的运算顺序和指定强制转换或类型转换。
(3)点运算符
点运算符(.)用于访问数据结构的成员。
结构:
数据结构.成员
(4)索引运算符
索引运算符([])用于数组、索引器和属性,也可用于指针。
(5)new运算符
new运算符用于创建一个新的类型实例,有3种形式:
a.对象创建表达式,用于创建一个类类型或值类型实例
b.数组创建表达式,用于创建一个数组类型实例
c.代表创建表达式,用于创建一个新的代表类型实例
(6)typeof运算符
用于获取系统原型对象的类型,也就是Type类型。
Type类包含关于值类型
和引用类型的信息。
(7)checked和unchecked运算符
用于检测指定的运算,并指出相应的错误信息。
.
4.2运算符的优先级
4.3表达式:
用运算符把操作数连接起来的式子。
操作数包括文本、变量、常量和表达式等
五.程序的基本结构
5.1顺序结构:
每一条语句都要执行并且只执行一次,语句的执行先后次序和语句在顺序结构中出现的先后次序一致。
程序代码中最基本的结构,逐条执行程序中的每一天语句,从程序开始执行到程序结束为止。
5.2分支结构:
程序设计过程中,经常要根据条件进行判断,选择要执行的语句序列。
分支结构:
根据条件的不同,选择执行程序中的不同分支,每个分支对应一个语句
序列。
(1)条件语句
对条件进行判断,根据判断结构选择执行不同的分支。
有if语句、
If...else语句和switch语句。
单分支结构语句:
只有if语句的分支结构
双分支结构语句:
If...else语句的分支结构
多分支结构:
含有多个if...else语句的分支结构
(2)switch语句
Switch(表达式)
{
Case常量表达式1:
语句序列1;
break;
Case常量表达式2:
语句序列2;
break;
......
.......
.......
Case常量表达式n:
语句序列n;
break;
Default:
语句序列n+1;
Break;
}
Switch分支结构多用于常量比较少的情况。
5.3循环结构:
在程序开发中,经常要反复执行某段代码,为了避免重复输入相同代码,同时提高程序代码得可读性,引入了循环结构,需要反复执行的代码称为循环体。
循环结构使用循环条件控制循环体代码得执行与否,循环条件中通常使用一个特殊的变量,循环变量。
C#提供的循环语句有:
for语句,while语句,dowhile语句和foreach语句。
(1)for循环
for(表达式1;表达式2;表达式3)
{
循环体
}
(2)while循环
While(表达式)
{
循环体
}
(3)do--while循环
do
{
循环体
}while(表达式)
(4)foreach循环
foreach循环用于遍历整个集合或数组,可以获取集合中的所有对象,不需要给出循环变量和循环条件,也不需要给循环变量赋初值和修改循环变量的值。
foreach(数据类型局部变量in集合或者数组)
{
循环体
}
5.4循环嵌套
(循环嵌套就是在循环体中还可以使用循环语句。
)
循环嵌套需要区分外层循环和内层循环,外层循环执行一次,内层循环执行一遍。
外层循环和内层循环的循环控制要互相独立。
外层循环和内层循环要定义2个不同的循环变量。
如果循环结构在for语句中定义循环变量,该变量被视为局部变量,循环结构结束后,变量就被释放,循环语句外再引用这个循环变量就会出错。
六.异常处理与程序调试
6.1C#错误类型:
(1)语法错误:
代码不符合C#语言的语句。
(2)运行错误:
异常。
(3)逻辑错误:
没有实现编程人员的设计意图和功能。
6.2异常处理概述:
异常:
程序执行时遇到的错误情况或意外行为。
异常处理:
编程人员在程序编写过程中对可能发生的错误和异常预先采取的处理措施。
常见的异常类有:
6.3异常处理过程:
try-catch语句是C#提供的异常处理语句,语法如下:
try
{
可能出现异常的语句序列;
}
Catch(异常类型异常对象)
{
对可能出现的异常进行处理;
}
try-catch-finally语句,语法如下:
try
{
可能出现异常的语句序列;
}
Catch(异常类型异常对象)
{
对可能出现的异常进行处理;
}
finally
{
最后要执行的代码,进行必要的清理操作,以释放资源
}
throw语句
在try-catch和try-catch-finally语句中的try块中,除了系统自动抛出异常外,也可以使用throw语句抛出异常;throw语句既可以引发系统异常,也可以引发自定义异常。
throw异常对象
自定义异常类:
如果系统提供的异常类不能够与程序中的异常相匹配,就需要自定义异常类。
自定义异常类的语法如下:
Class自定义异常类名:
异常基类名
{
//语句块
}
6.4程序调试:
程序调试的主要目的是解决程序中的逻辑错误,通过设置断点,跟踪观察程序的执行过程,发现造成逻辑错误的具体语句,然后修改程序实现设计目标。
(1)鼠标左键单击代码窗口最左边灰色区域对应语句行的位置添加断点,再次
单击删除断点,左侧的红色圆点即为断点
(2)鼠标左键单击语句所在行,然后按F9来添加断点,再次按F9删除断点
(3)鼠标左键单击语句所在行,然后右键单击,在弹出的快捷菜单中选择【断
点】---》插入断点。
6.4.2启动、继续和停止调试
选择菜单【调试】---》启动调试或按F5键启动调试,或单击工具栏的启
动按钮,启动调试。
启动调试后,可以选择菜单【调试】---》【停止调试】来停止调试。
6.4.3单步调试
启动调试后,可以在菜单中选择【调试】---》【逐语句】或者【调试】---》
【逐过程】进行逐语句或逐过程调试。
===》逐句调试相当于为程序中的每个语句都加上一个断点,每次执行一条语句。
===》程序执行到被调用函数内部,需要停止逐语句调试时,可以选择【调试】
---》【跳出】,程序将返回到调用函数。
6.4.4调试监控
Visualstudio提供了局部变量窗口、监视窗口、自动窗口和快速监视窗口等对
程序的运行进行监控。
(1)局部变量窗口
(2)自动窗口(3)监视窗口(4)快速监视窗口
七.常用数据类型的用法
7.1字符串
(C#中,字符串常用于C#重新的输入、输出,文件读、写操作)
A.创建字符串:
String字符串变量名;
Stringstr=”XJT”;
(1)在定义字符串变量的同时赋值Stringstr=”XJT”;
(2)将一个字符串赋值给另外一个字符串:
stringa=str+”123”;
(3)使用创建string对象的方式,创建包含指定个数给定字符的字符串。
Stringa=newstring(‘a’,5);//创建了一个字符串
stringa=”aaaaa”;
B.字符串基本操作:
(1)字符串判等
a.字符串变量1.Equals(字符串2);
其中字符串2可以是变量也可以是常量。
字符串变量1调用成员函数Equals(),
比较字符串变量1对应的字符串与字符串2是否相等,相等返回True,不相等
返回False。
b.String.Equals(字符串1;字符串2);
Eg:
stringa=”XJT”;
Stringb=s;
Console.WriteLine(a.Equals(b));//===》string.Equals(a,b);
(2)字符串的比较
a.字符串变量.CompareTo(字符串2);
b.Spare(字符串1,字符串2);
字符串比较方式:
找到2个字符串中第一个不相同的字符,该字符ASCII码值
小的字符串小。
若字符串变量小于字符串2返回-1,字符串
变量小于字符串2相等返回0,字符串变量小于字符串2大
于返回1.
(3)判断字符串变量是否包含指定字符或字符串
a.字符串变量.Contains(字符1);
b.字符串变量.Contains(字符串2);
(4)查找字符串变量中指定字符或字符串出现的位置
a.字符串变量.IndexOf(字符1);
b.字符串变量.IndexOf字符串2);
返回要查找的字符或者字符串首字母在字符串中的位置数值。
(5)取子串
a.字符串变量.SubString(起始位置,字符串长度);//取给定长度子字符串
b.字符串变量.SubString(起始位置);//取到字符串结尾
(6)插入子串
a.字符串变量.Insert(起始位置,子字符串2);
一个字符串起始位置是0,
(7)删除子串
字符串变量.Remove(起始位置,子串长度);
字符串变量.Remove(起始位置);
不指定子字符串串长度就取值到字符串变量结尾。
(8)替换子串
字符串变量.Replace(字符串1,字符串2);//字符串2替换字符串1
(9)去除字符串空格
字符串变量.Trim();除去字符串头部和尾部的空格。
C.StringBuilder类
String类是引用类型,每次改变string类对象的值,(修改字符串变量对应
的字符串),都需要再内存里为新字符串重新分配空间。
会导致内存开销大,
所以引入StringBuilder类。
7.2数组
1.一维数组:
理解为一个表格,一维数组就是一个一行多列的表格。
数组中的数据称为数组
元素。
数组不能直接使用,要先对数组进行初始化。
初始化就是指出数组中元素的个数,为数组分配内存空间,也可以同时为数组
元素赋值。
a.数据类型[]数组名=new数据类型[数组元素个数]{数组元素列表};
b.数组名=new数据类型[数组元素个数];
Int[]a=newint[5]{1,2,3,4,5};
a=newint[5]{1,2,3,4,5};
数组包含多个数组元素,为了区分数组的不同元素,使用“数组名[下标]”的方
式访问数组元素。
C#中提供了一个属性Length,来表示数组的长度,也就是数组中元素的个数。
2.二维数组:
一维数组就是一个一行多列的表格,二维数组可以看作多行多列的表格。
二维数组语法格式:
数组类型[,]数组名=new数据类型[行数,列数]{数组元素列表};
数组类型[,]数组名=new数据类型[行数,列数];
3.数组的基本操作:
(1)数组排序和反转
Array类的静态方法Sort()可以实现数组的排序,无返回值。
Array.Sort(数组名);//升
Array.Reverse(数组名);//降
(2)查找数组元素
Array类的静态方法IndexOf()可以判断数组是否包含与给定值相等的元
素,是返回对应数组元素的下标,否则返回-1.
Array.IndexOf(数组名,要查找的值);
(3)数组元素求和、最大值、最小值、平均值:
C#提供了方法sum()、Max()、Min()、Average()对数组
元素进行统计。
数组名.sum();
(4)数组字符串相互转化:
String类的静态方法Join()可以将数组中所有元素连接起来,生成
一个字符串,返回值为该字符串。
String.join(分隔符,数组名);
String类的方法Split();可以根据分隔符将字符串切分为多个部分,每个
部分作为一个数组元素生成一个字符串数组,返回值为该字符串数组。
字符串变量.Split(分隔符);
(5)在字符串中查找、删除字符数组元素:
String类方法IndexOfAny();在字符串中查找给定字符数组中的所有
元素,返回字符数组元素在字符串中首次出现的位置值,查找失败则返回-1.
字符串变量.IndexOfAny(字符数组名);
String类方法LastIndexOfAny();在字符串中查找给定字符数组中
所有元素,返回字符数组元素在字符串中最后出现的位置值,查找失败则返
回-1。
字符串变量.LastIndexOfAny(字符数组名);
数组是C#中重要的数据类型,可以作为参数传递给某个方法。
7.3枚举
枚举类型用于声明一组命名常数。