.NET 可以干什么呢?
1、桌面应用程序 (WinForm )
2、internet 应用程序(asp.net)
3、手机应用开发(wp7)好像现在C#也能开发android应用了
现在主要有两个方向C/S和B/S,各有千秋,而且有向B/S移植的趋势。
.NET平台上集成了多种语言,只要符合CLS的语言开发的应用都可以在该平台上运行。
现在C#是微软官方推荐的平台开发语言,他能把.NET的效果发挥到极致。
关于.NET的有关介绍,在这里就不在赘述。。。。。。。现在只是把我这段时间以来的学习总结一下和大家分享。请大牛指正。
一、关于C#学习笔记
C#中常见的j简单数据类型有int char double bool string decimal.等等
在使用变量的时候的三种方法有:先申明再赋值,定义变量时直接赋值,一次定义多个同类型变量个变量之间用,隔开以;结束。再分别赋值
变量命名规则
●变量名必须以字母开头
●变量名只能由字母、数字和下划线组成,而不能包含空格、标点符号、运算符等其它符号。
●变量名不能与C#中的关键字名称相同。
●变量名不能与C#中的库函数名称相同。
但在C#中有一点是例外,那就是允许在变量名前加前缀“@”。在这种情况下,我们就可以使用前缀“@”加上关键字作为变量的名称。这主要是为了与其他语言进行交互时避免冲突。因为前缀“@”实际上并不是名称的一部分,其它的编程语言就会把它作为一个普通的变量名。在其它情况下,我们不推荐使用前缀“@”作为变量名的一部分。
运算符
连接符+两边参与运算的数据类型为数字则表示数学上的加法,两边参与运算的数据有一个是字符类型那么他表示连接的意义
1)算术运算符:+ - *(乘) % (取余)/(除法) 他们都是二元运算符 要求参与操作的的数据类型必须一样并且运算结果与操作数类型一样
2)在算术表达式中改变运算顺序正使用小括号
复合运算符
+= - = /= *=
关系运算符
< > ==(相等比较)>= <= !=
逻辑运算符
&&与 ||或 !(非,用于bool型)
&& 和||的短路问题: &&连接的表达式第一个错误将不计算第二个, || 连接的表达式第一个正确将不计算第二个
转义字符
当我们需要在字符串中输入一些特殊字符时,比如半角引号,换行,退格就需要转义字符。
转义字符是一个字符,它由 \+一个字母来组成具有特殊意义的
\n换行 \b backspack 退格 \t tab 有多个空格组成有行与行对齐的功能
\\表示一个\第一个为转义符,第二个为特殊字符
@功能
在字符串前面加一个@有两种意义
1) 字符串中如果\,则不再理解为转义字符。
2) 是字符串可以换行
3) 在字符串前面加一个@,则字符串中用两个“”表示一个“
自增自减
++ -- 有前自加后自加 前自减后自减
Int age= 18 ; int sum=age ++ -10;此代码age是后加。所以在运算时,age++取age原值参与运算,所以sum=8;
Int age =18; int sum =++age -10;此代码age是前自加,所以在运算时++age先取经过运算后的值19在参与新运算所以sum= 9。
总之,不管是++age还是age++,经过运算后,age的值都进行了+1 运算
C#中一般情况下一元运算符的优先级大于二元运算符的优先级
C# 中的数据类型
C#中所有的类型按照存储方式分为两类:值类型,引用类型。C#数据类型包括:值类型(简单类型、结构类型、枚举类型),引用类型(类类型、数组类型、接口类型、委托类型 字符串类型string ),指针类型。
值类型的变量包含的是数据本身,而引用变量包含的是一个地址,这个地址指向包含实际数据的内存。值类型变量一般存储在堆栈中,而引用类型的变量一般存储在托管堆中。对于引用类型的变量要注意区分变量本身和变量所引用的对象。下面的代码定义了一个值类型的变量和引用类型的变量: int i=6; Form form1=new Form();
注意:可空(Null)引用类型、自定义类型、string、大部分类都是。
不可空的:值类型。Int double long bool decimal DateTime等。Int ? 就变为可空的int类型
匿名类型: var news= new {Title=”asda”,Msg=”dfdf” }
常量
语法:const 类型 常量名 = 常量值;
Const double PI= 3.14;
只能在定义时 赋值,在其他地方不允许赋值。
枚举:
让我们定义一种枚举类型并且在定义这种类型时我们要指定这个类型所有的值。
语法:enum 自己起的类型名称 { 该类型所有的值列出用逗号隔开};
枚举的定义,一般和类定义在同一个级别。这样,在同一个命名空间下的所有类型就都可以使用这个枚举了。(方法中或类中都能定义)。
枚举的作用:
1 限制用户不能随意赋值,只能在定义枚举时列举的值中选择。
2 不需要死记每一个值是什么,只需要选择相应的值。
注意:定义枚举时值不能是int类型!
枚举类型的变量是有默认编号的可以强制转换成int类型,第一量默认为0,后面依次加1,也可以把第一个枚举量赋值为其他整数
可以把字符串转换成定义的枚举类型 语法为 (自己定义的枚举的类型名)(Enum..Parse(typeof(自枚举类型名),待转字符串);
结构
1) 比如我们上课讲的为了存储一个人的信息,要申明一组变量。当我们要存储N个人的信息时,就要申明N组变量,麻烦。
2) 存储一个人的信息的这几个变量没有关系,容易记错。
语法:
访问修饰符 struct 结构名{定义结构成员}(访问修饰符为public private protect等)
注意定义一个结构后,就可以直接声明相应的变量了。声明好变量后,通过变量名.成员名 来访问结构成员
数组
1 数组:可以帮我们一次声明多个同类型的变量,这些变量在内存中是连续存储的。
2 语法 :数据类型 [ ] 数组名 = new 类型 [数组长度]; string [] names = {"zhang san ","lisi ","wangwu "};声明字符串数组
// int [] score = new int [5];//声明了一个长度为5的数组,名为score ;通俗的说就是声明了一个数组,里面包含5个int 类型的变量,数组名叫score 里面的5个int 类型的变量叫做数组的元素。
3 如何访问数组:通过下标来访问数组。 数组名 [编号] 向第0个元素赋值3. score[0] = 3
Int 类型数组一旦声明里面的元素默认初始化为0.
数组元素的下标从0 开始
通过 数组名.length 可以获得数组长度。 Console. Clear();可以用来清屏。
保存多个值,几乎任意类型都可以声明数组。
两种声明方法 Int [ ] nums =new int [3] int [ ] nums ={3,5,8}
Int [ ] nums = new int [3]{3,5,7} 个数和声明数必须一致
Int [ ] nums = new int [5]{1,2,3}是错的
Int [ ] nums = new int [] {5,3,6}是正确的,可以省略数组元素个数
N个元素互换 交换N/2次
自动转化(隐式转化)与强制转化
Double 范围比decimal广,但精度比他小,两者不能相互转化。
参与运算(算术运算和赋值运算)的操作数和结果类型必须一致 double a =10/3; 结果为3
在自动转化中,转化是不会丢失精度的,如果丢失精度那么这个转化肯定不会自动执行
经常见到的就是,参与运算的两个操作数一个是int 另一个是double 那么int 类型会自动转换成double类型。
Double pi=3.14; int i=(int)pi;把double类型强制转换成int类型。( Int a=9.14 ;是错的)
String age =(int ) console.readline(); int a = (int)”33”;是错误的;因为强制类型转换要求待转换的类型和目标类型必须都为数字。
Int 变量= Convert.ToInt32(待转字符串);上面语句的意义是把待转换的字符串转换成int类型后赋给变量
String a =”3”; int c = convert. toint32(a);并没有把a 的值改变 ,而是把字符串转化为int型赋给 c.
Convert.tostring()
Int a = int .parse (string );把字符串转换成整形。注意如果转化失败就会出错,用Try catch捕获建议用int.tryparse()
C#中异常捕获如何完成
Try
{有可能出现错误的代码写在这里
}
Catch{出错后的处理
catch块可以同时有很多(如上)但是只能捕获与catch内捕获类型一致的异常,比如catch(int nError)只能捕获int型异常,catch(CMyexception &Error)只能捕获CMyexception型异常在有多个Catch时捕获的异常类型从精确到广泛的Exception
catch 子句使用时可以不带任何参数,这种情况下它捕获任何类型的异常,并被称为一般 catch 子句。它还可以接受从 System.Exception 派生的对象参数,所有的异常斗殴才能够该类继承
在同一个 try-catch 语句中可以使用一个以上的特定 catch 子句。这种情况下
catch 子句的顺序很重要,因为会按顺序检查 catch
子句。将先捕获特定程度较高的异常,而不是特定程度较小的异常。
}
finally
{
//不管什么情况都会执行,包括try catch 里面用了return
,可以理解为只要执行了try或者catch,就一定会执行 finally
}
程序这样执行:如果try中的代码没有出错,则程序正常运行try中的内容后不会执行catch中的内容。如果try中的代码一旦出错程序立即跳入catch中执行,try后面的代码不再执行
If结构
If(条件){语句;}
首先判断条件的结果;如果条件为true,则执行语句,如果为false 则跳过语句,执行后面的语句。If后的括号中药能计算成bool型
If else及结构
If(表达式)
{语句1;}
Else
{语句2;}
if()
{}
else if()
{
}
else if()
{
}
else
{
}//从if开始判断只要有一个满足条件就跳出语句体如果都不符合就执行else语句
Switch 的结构
Switch ( 表达式)
{
Case 值1: 语句块1;break;
Case 值2: 语句块2;break;
Case 值3: 语句块 3; break;
Default : 语句块 4;break;
}
首先计算表达式的值,然后比较case后面的值,与case的顺序无关,也与default的位置无关。如有匹配项,则执行匹配项, 直到break跳出switch。如果没有匹配项执行default 到break跳出 switch语句。
While 循环
While(条件表达式)
{
语句体;(循环体变量改变)
}
先执行,再判断
Do { 循环体;}
While(条件);
执行过程,1 执行循环体,执行完循环体转向2,
2 判断条件是否成立,如果条件为true,则转向1,如果条件为false,则转向3
3 跳出循环,循环结束
FOR循环
语法:
For (表达式1; 表达式2 ;表达式 3 )
{循环体 ;}
For 循环用于已知循环次数的循环。
一般情况下表达式1 用于定义循环变量和对循环变量赋初始值
表达式2 是循环条件
表达式3 用于改变循环变量的值
执行过程:
第1步 :计算表达式1 ,转向第2步。
第2步 : 计算表达式2(循环条件),如果表达式2的值为true转向第3步;如果为false,转向第5步 。
第3步 : 执行循环体,转向第4 步。
第4步 : 执行表达式3, 转向第2 步。
第5 步: 循环结束。
Break 用于循环 来结束所在循环可以用于switch case中 跳出switch
Continue 用于while 循环 立即结束本次循环(continue后的程序不在执行,判断循环条件,如果成立则进行下一次循环,否则结束循环.。
对于for循环,到达continue后直接执行表达式3 ,在判断循环条件是否成立。
输入输出函数
占位符{数字}的使用!占位符有{数字}组成,数字有0 开始编号{0}{1}{2}编号与后面的参数对应。编号小于参数的个数
console.WriteLine();有多个参数,输出时.输出的都是第一个参数中的内容. 从第二个参数开始都是用来替换第一个参数中的占位符.的值,所以从第二个开始要不要输出,就要看第一个参数中有没有相关的占位符。
Console.ReadLine();用于让用户在键盘上输入一句话,当程序执行到下面一句话就会暂停然后等待用户从键盘上输入一句话按回车键将继续执行
Console.readline凡是用户输入的东西都安字符串来进行接收
String input= Console.ReadLine();
三元表达式
表达式1 ?表达式 2: 表达式3
执行过程:首先计算表达式 1 ,表达式1 应该是一个能够计算成bool类型的值,如果表达式1的值为true,则表达式2的值作为整个表达式的值,如果表达式1 的值为false,则表达式3,的值作为整个表达式的值
表达式2 和表达式3 的值类型要兼容
程序调试
设置断点
单步运行(按 F10 或F11逐句执行)监视、判断正确与否
观察变量