前言
1..Net
概念:一般指.Net Framework 框架,一种平台,一种技术
.NetFramework框架是.Net平台不可缺少的一部分,它提供了稳定的运行环境来保证我们基于.Net平台开发的各种应用能够正常运行
应用
1.桌面应用程序
eg:Windform应用程序
2.Internet应用程序
(.Net开发的internet应用程序叫ASP,NET应用程序)
ge:msdn,从事多年,携程,招商银行,京东等
3.手机开发
eg:Wp8
4.unity 3D
(游戏开发或者虚拟现实)、
.Net两种交换模式
1.C/S:客户机(后端)/服务器
(C/S:客户端要安装专用的客户端软件)
eg:QQ
2.B/S:浏览器/服务器模式
(B/S:客户机是只要安装一个浏览器)
2.C#
概念:一种编程语言,可用于开发.net平台的应用。(.Net的主流语言,无法脱离.Net平台)
3.IDE
IDE指我们的开发工具
4.vs的学习
1.启动vs
a.双击图标
b.调出cmd,输入 devenu
2.解决方案,项目及类之间的关系
解决方案:公司、
项目:部门
类:员工
在视图中找到解决方案管理器
3.program中的各个组成成分
引用命名空间:
京东---》京东在线商城项目---》顾客类
淘宝---》淘宝在线商城项目---》顾客类
4.方法或者函数
Main函数是程序的主入口,若想代码被执行必须写在Main函数中
5.深入了解vs
.sin:解决方案文件,里面包含整个解决方案的信息,可以双击运行。
.csproj(C Sharp project):项目文件,里面包含这个项目的信息,可以双击运行
.cs:类文件
6.书写代码需要注意的地方
1.代码中出现的所有标点都是英文半角
2.代码以英文分号结束
3.Console.WriteLine("'需要打印的内容'");
Console.ReadKey();
a.暂停当前程序,等待用户按下任意键继续,按下的任意键将显示在控制台当中,如果不想按下的任意键显示可以在括号内输入true。
7.运行程序的两种方式
第一种:直接启动
第二种:敲击F5
8.常用快捷键
9.异常
概念:语法上没有错误,只不过在程序运行过程中,由于某些原因出了文问题,使程序无法运行
异常捕获
我们再程序中经常出现各种异常,你如果想要你的程序变得更坚强一点。在你的代码中应该经常性的使用try-catch来进行异常捕获。
哪怕代码有可能出现异常,你就踹他一脚。
语法:
try
{
可能会出现异常的代码;
}
catch
{
出现异常后要执行的代码;
}
执行过程:如果try中的代码没有出现异常,那么catch中的代码不会执行。如果try中的代码出现了异常,哪怕这行出现异常的代码后面还有一百行都不会执行了,而是直接跳到catch中执行代码
10.波浪线
a.如果你的代码中出现了红色波浪线,意味着你的代码中出现了语法错误。
b.如果你的代码中出现了绿色波浪线,说明你的代码没有错,但是可能出错。警告线
变量
概念:用来在计算机中存储数据的东西
1.存储变量的语法:
a.变量类型
整数类型: int 只能存储整数,不能存储小数
小数类型:double 既能存储整数,又能存储小数,小数点后面位数15~16
金钱类型:decimal:用来存储金钱,值后面需要加上 m
字符串类型: string 用来存储多个文本,也可以存储空,字符串类型的值需要被双引号
字符类型: char 用来存储单个字符,最多最少只有一个字符,不能存储空。需要被单引号
2.使用规则
先声明再赋值再使用
3.命名规则
****首先保证变量的名字要有意义
a.现阶段给变量取名都以字母开头
b.后面可以更任意“字母”,“数字”,“下划线”.
注意:
a.变量名不要与C#系统中关键字重复
c.在C#中,大小写是敏感的。除了HTML
d.同一个变量名不允许重复定义(先这么认为不严谨)
给变量起名时要遵循两个规范
1.Camel 骆驼命名规范。要求变量名的首单词的首字母小写,其余每个单词的首字母要大写
2.pascal 命名规范: 要求每个单词的首字母都要大写,其余字母小写。多用于给类或者方法命名
eg: HighSchoolStudent ------pascal
highSchoolStudent ------Camel
4.类型转换
隐式类型转换:
要求两边参与运算的操作数的类型必须一致,若不一致,满足下面条件会自动转换。
a.两种类型兼容
例如:int和double类型兼容(都是数字类型)
b.目标类型大于原类型
例如:double>int
显示类型转换:
a.两种类型相兼容 int-----double
b.大的转成小的 double ----int
5.字符串类型
Console.Readline();
用于接收用户的输入,要定义一个字符串变量来接受并存储用户输入的值。
总结:
自动(隐式)类型转换 :int ---- >double
显示类型转换:double - --->int
类型转换
6.变量的作用域
变量的作用域就是你能够使用到这个变量的范围
变量的作用域一般从声明它的那个括号开始到那个括号所对应的结束的括号结束。
在这个范围内,我们可以访问并使用变量。超出这个范围就访问不到了。
eg:
这个程序里面的n。
运算符
1.赋值运算符
把右边的值赋值给左边的变量
一旦给变量赋新值旧值就不存在了
2.“+”号的作用
连接字符串
两个值相加
3.占位符
使用方法: 先挖个坑再挖个坑
注意:
a.挖了几个坑,就得填几个坑,如果多填了,没效果。
b.输出顺序:按照挖坑顺序输出。
4.转义符
概念:一个'\'+一个特殊的字符,组成了一个具有特殊意义的字符。
\n:表示换行
\":表示一个英文半角的双引号 ”
\t:表示空格
\b:表退格键,放在字符串首尾没用
\\:表示一个"\"
@:
a.取消"\"在字符串中的转义作用,使其单纯的表示为一个'\'
b.将字符串按照编辑的原格式输出
5.算数运算符
+
-
*
/
%
++:分为前后++
前++:先自身加一再参与运算
后++:先参与运算在自身减一
--:分为前后--(规则同上)
对于++或者--这样只需要一个操作数就能完成的运算,我们称之为一元运算符
+-* / %对于这些需要两个及以上才能完成的运算的操作符,我们称之为二元运算符
运算符优先顺序
先一元运算符再二元运算符
6.关系运算符
>
<
>=
<=
==
!=
关系运算符是用来描述两个事物之间的关系
由于关系运算符连接的表达式称之为关系表达式
在C#中我们用bool来描述对与错
bool类型的值只有两个 一个true,一个false
7.逻辑运算符
&& 逻辑与
||逻辑或
!逻辑非
用逻辑运算符连接的表达式叫逻辑表达式
8.复合赋值运算符
-=
+=
*=
/=
%=
结构
分支结构
if语句
语法:
if(判断语句)
{
要执行的代码;
}
判断条件:一般为关系表达式或者bool类型的值
执行过程:程序运行到if处,首先判断if所带的小括号中的判断条件,如果条件成立,也就返回true,则执行if所带的大括号中的代码,如果判断条件不成立,也就是返回一个false。则跳过if结构,继续向下执行
if结构的特点:先判断,再执行,有可能一行代码都不执行
if-else语句
语法:
if(条件)
{语句1;}
else
{语句2;}
执行过程:程序运行到if处,首先判断if所带的小括号中的判断条件是否成立,如果成立,也就是返回一个true,则执行if所带的大括号中的代码。
执行完成后跳出if-else结构
如果if所带的小括号中的判断条件不成立,也就是返回一个false,
则跳过if语句,执行else所带大括号中的语句,执行完后跳出if-else结构。
if-else特点: 先判断,再执行,最少都要执行一条代码。
用于两种情况的判断
选择结构
if-else
语法:
if(判断语句){
}else if(判断语句){
}else if(判断语句){
}........
注意:else永远跟距离它最近的那个if配对。
作用:用于处理多条件的区间性的判断。
执行过程:程序首先判断第一个if所带的小括号,如果错误返回一个false,执行else语句如果后面的if语句中有符合判断语句的,则返回一个true,再执行if中的语句,然后跳出结构。如果一直没有符合的if条件,则执行最后的else代码,如果没有else代码,则整个if-else什么都干不了。
switch-case
用来处理多条件的定值判断。
语法:
switch(变量或者表达式的值)
{
case 值1:要执行的代码;
break;
case 值2:要执行的代码;
break;
case 值3:要执行的代码;
break;
........
default:要执行的代码;
break;
}
执行过程:程序执行到switch处,首先将括号中变量或者表达式的值计算出来,然后拿着这个值依次跟每个case后面所带的值进行匹配,一旦匹配成功,则执行该case所带的代码,执行完成后,遇到break;。跳出switch-case结构。如果,跟每个case所带的值都不匹配。就看当前这个switch-case结构中是否存在default,如果有,则执行default中的语句,如果没有default,则该switch-擦色结构什么都不做。
循环结构
while
语法:
while(循环条件)
{
循环体;
}
复杂数据类型
常量
声明常量的常用语法;
const 变量类型 变量名 = 值;
注意:
常量无法被赋值
枚举
语法:
[public] enum 枚举名
{
值1,
值2,
........
}
public:访问修饰符。公开的公共的,哪里都可以访问。
enum:关键字,声明枚举的关键字
枚举名:要符合Pascal命名规范
将枚举声明到命名空间的下面,类的外面,表示这个命名空间下,所有类都可以使用这个枚举。
枚举是一个变量类型,int---double string decimal。
只是枚举声明,赋值,使用的方式跟那些普通的变量类型不一样。
类型转换
我们可以将一个枚举类型的变量跟int类型和string类型相互转换。
枚举类型默认是跟int类型相互兼容,所以通过强制类型转换的语法互相转换
当转换一个枚举中没有值的时候,不会抛异常,而是直接将数字显示出来。
枚举同样也可以和string类型相互转换,如果将枚举类型转换成string类型,则直接调用ToString();
如果将字符串转换成枚举类型则需要下面这一行代码:
(要转换的枚举类型)Enum.parse(typeof(要转换的枚举类型),"要转换的字符串");
如果转换的 字符串是数字,则就算枚举中没有,也不会抛异常
如果转换的字符串是文本,如果枚举中没有,就会抛出异常。
所有的类型都能够转换成string类型,调用ToString()
结构
可以帮助我们一次性声明多个不同类型的变量
语法:
[public] struct 结构名
{
成员;//字段
}
数组
一次性存储多个相同类型的变量
语法:
数据类型[ ] 数组名=new 数据类型[数组长度]
int 类型的数组被声明后它的元素默认值是0。
string 类型的数组被声明后它的元素默认为null。
bool 类型数组被声明后它的元素默认为false。
数组的长度一旦被固定了就无法更改
数组的声明方式:
int [] num2 = {1,2,3};
冒泡排序
就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列。
方法:
对数组进行升序排列:Array.Sort(数组名)
对数组进行反转:Array.Reverse(数组名)
方法
函数:
就是将一堆代码重用的一种机制。函数就是一段代码,
这段代码可能有输入的值(参数),可能会返回值。一个函数就就像一个专门做这件事情的人,我们调用它来做一些事情,他可能需要我们提供一些数据给他,他执行完后可能会有一些执行结果给我们 。要求的数据就叫做参数,返回的执行结果就是返回值。
函数语法:
[public] static 返回值类型 方法名([参数列表])
{
方法体;
}
public:访问修饰符,公开的,公共的,哪里都可以访问。
static:静态的
返回值类型:如果不需要写返回值,写void
方法名:Pascal 每个单词的首字母都要大写,其余字母小写。
参数列表:完成这个方法所必须要提供给这个方法的条件。如果没有参数,小括号也不能省略。
方法写好后,如果想要被执行,必须要在Main函数中调用。
在某些情况下,类名是可以省略的,如果你写的方法跟Main()函数在同一个类中,这个时候类名可以省略
方法调用的语法:
类名.方法名([参数]);
return
a.在方法中返回要返回的值。
b.立即结束本次方法
函数
我们在Main()函数中,调用Test()函数,我们管Main()函数称之为调用者,管Test()函数为被调用者。
如果被调用者 想要的到调用者的值:
(1).传递参数
(2).使用静态字段来模拟全局变量。
如果想要得到被调用者的值:
(1)返回值
不管是形参还是实参,都是在内存中开辟了空间的。
方法的功能一定要单一
eg:Get Max(int x,int n2)
方法最忌讳的就是出现提示用户输入字眼!!!!
out,ref,params参数
1.out参数
如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,我们可以考虑使用out参数
out参数就侧重于在一个方法中返回多个不同类型的值
eg:
2.ref参数
能够将一个变量带入一个方法中进行改变,改变完成后,再将改变后的值带出去。
ref参数要求在其方法外必须为其赋值,而方法内可以不赋值。
3.params参数
将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。
params可变参数必须是形参列表中最后一个元素。
方法的重载
概念:方法的名称相同,但是参数不同。
参数不同,分为两种情况
(1).如果参数个数相同,那么参数的类型就不能相同。
(2).如果参数的类型相同,那么参数的个数不能相同。
***方法的重载与返回值没有关系。
方法的递归
方法自己调用自己.