.NET 基础知识点汇总
课前知识储备。
一、C#与.NET的区别?
1..NET/dotnet:一般指.Net Framework框架,一种平台,一种技术
2.C#(sharp):一种编程语言,可以开发基于.net平台的应用
3.(*)JAVA即是一种技术也是一种语言
对于.NET与.net Framework我们可以这样用这样的例子来进行说明
例如 .NET---------》相当于中国移动提供的移动互联网平台
.NET Framework 平台----------》相当于中国移动在全世界各地建造的信号塔
基于.net 平台开发的软件相当于手机中的各种功能;要想正常运行开发软件的话,就离不开.net平台;如果.net平台要正常运行的话,就离不开.net framework 框架提供的稳定环境。
二、.NET的发展史
2002年6月22日 Microsoft公司正式发布.net 平台。李开复
三、.NET可以干什么?
1)桌面应用程序 也叫做winform应用程序。
2)Internet应用程序 使用.net 开发的internet应用程序叫 ASP.NET应用程序
3)手机开发 在2011年Microsoft推出了wp7 发展时间不长就淘汰 Unity3D (开发手机游戏)是一种应用在手机中不错的技术。
四、.NET的两种交互模式
C/S 即 Client/Server 客户机/服务器模式 要求:要求用户的电脑上必须要安装一个客户端 如:qq 360
B/S 即 Browser/Server 浏览器/服务器模式 要求: 要求用户只需要安装一个浏览器即可。
五、IDE介绍
1.IDE(Integrated Development,集成开发环境)
2.Visual Studio 简介:
一套完整的开发工具集用于开发桌面的应用程序、ASP.NET WEB一用程序、XML、Web Service、移动应用程序为快速开发提供强大支持
六、启动visual studio的方法
windows+r打开运行命令框写入 devenv命令
如果卡死 找到进程 结束devenv这个进程
七、MSDN介绍
MSDN 的全称是 Microsoft Developer Network。这是微软公司面向软件开发者的一种信息服务。MSDN 实际上是一个以 Visual Studio 和 Windows 平台为核心整合的开发虚拟社区,包括技术文档、在线电子教程、网络虚拟实验室、微软产品下载(几乎全部的操作系统、服务器程序、应用程序和开发程序的正式版和测试版,还包括各种驱动程序开发包和软件开发包)、Blog、BBS、MSDN WebCast、与 CMP 合作的 MSDN 杂志等等一系列服务。
八、文件扩展名
在保存文件的时候尽量保存到自己指定的文件目录下 如果找不到保存的路径时可以通过(右击“解决方案 ”在弹出的快捷菜单中选择“在windows资源管理器中打开文件夹”)打开项目的文件夹。
在打开的项目中有一个*.sln代表是解决方案文件的,在这个文件中包含了解决方案中的信息,这个是可以直接双击运行的。
.csproj: 是 C Shape Project的缩写 里面包含了项目的信息,不可以直接双击运行。
C#源文件(类)一般以cs结尾即类的扩展名是*.cs
C#程序的入口是Main函数,在Main中写代码就行.
八、注意点
1.在c#当中,是严格区分大小写的 Console.WriteLine();
2.在vs当中,所有的标点符号,都应该是英文半角状态下的标点符号,绝对不能出现全角或者中文。
3.解决方案中可以包含多个项目,项目可以包含多个文件,文件中是我们写的程序。
4.在文件中,命名空间中可以包含类,类中可以包含方法,方法中可以是我们写的程序。
5. 一般窗口不小心关闭了,在视图中寻找。
6. 重置开发环境,可以是我们的开发环境还原为默认状态。工具-导入和导出设置-重置所有设置-否,仅重置所有设置。
7. Main方法是我们程序的入口方法,当我们执行一个程序时,会首先找到一个Main方法,从Main的第一句程序开始执行,当Main方法执行完成后(即执行到Main方法的反大括号就结束了)。
8、初学者学习写程序的时候,必须要写下Main()方法中。
9、设置启动项 右键点击解决方案 选中属性----》当前选定内容
10、在C#中,每一句话都必须以“分号”结束
11、工具-选项-字体和颜色
12、工具-选项-文本编辑器-行号(勾选)
13、解决方案-新建项目(在当前解决方案下新建项目)
14、Console.WriteLine("你想显示的内容");
15、Console.ReadKey(); 当程序执行到这里的时候,等待用户从键盘上键入后,程序才继续执行
基础知识点回顾
一、C#中的注释
1、什么是注释? 注销和解释写的代码
2、注释的方式?
单行注释 注销或者解释单行代码 //
多行注释 注销你写的多行代码 /*要注释的内容*/
文档注释 解释你的类或者方法写的神马意思 ///
二、vs中常用的快捷键
1.Home 无论光标在哪,按下后跳转到该行最前面
2.End 无论光标在哪,按下后跳转到该行最后面
3.Page up 上翻一页
4.Page down 下翻一页
5.Shift 选中多个字符
6.Ctrl+Home 整个文档最前面
7.Ctrl+End 整个文档最后面
8.Delete 删除光标后面的
9.Backspace 删除光标前面的
10.Insert 覆盖字符
11.over 插入字符
12.Ctrl Z/X/C/V 撤销/剪贴/复制/粘贴
12.F5调试程序
13.F6生成程序
14. #Region和#Endregion 折叠语段
三、.Net Framework框架组成
1.FCL 类库
2.CLR 公共语言运行时 Common language runtime
当咱们点击F5运行程序的时候,CLR首先加载所有的类到内存中,然后找到其中的主函数(Main函数),从上到下一行一行的执行,
如果你的代码当中没有主函数,则程序不会运行,会报错,如果你的代码中有两个或两个以上主函数,程序也会报错。
主函数只能由一个。
MSIL:微软中间语言Microsoft Intermediate Language
CLR:公共语言运行时Common Language Runtime
CLS: 公共语言规范Common Language Specification
CTS:通用类型系统Common Type System
JIT:即时编译器 Just In Time
四、面试题
CTS、CLS、CLR分别作何解释(*)把英文全称背过来。
C#和.Net的关系。
C#只是抽象的语言,可以把C#编译生成Java平台的二进制代码,也可以把Java代码编译生成.Net平台的二进制代码。所以C#只是提供了if、while、+-*/、定义类、int、string等基础的语法,而Convert.ToInt32、FileStream、SqlConnection、String.Split等都属于.Net的东西。深蓝色是C#的,浅蓝色是.Net的。
C# new→IL:newobj
C# string →.Net中的String
类型的差别:.net中的Int32在C#中是int,在VB.Net中是Integer。
语法的差别:IL中创建一个对象的方法是L_0001: newobj instance void 索引.C1::.ctor()
C#中是new C1();VB.net中是 Dim c1 As New C1
CTS:Common Type System 通用类型系统。Int32、Int16→int、String→string、Boolean→bool。每种语言都定义了自己的类型,.Net通过CTS提供了公共的类型,然后翻译生成对应的.Net类型。
CLS:Common Language Specification 通用语言规范。不同语言语法的不同。每种语言都有自己的语法,.Net通过CLS提供了公共的语法,然后不同语言翻译生成对应的.Net语法。
CLR:Common Language Runtime 公共语言运行时,就是GC、JIT等这些。有不同的CLR,比如服务器CLR、Linux CLR(Mono)、Silverlight CLR。相当于一个发动机
五、变量
用户存储正在运行的程序数据(不准备)
RAM:内存有个特点,断电后里面的数据丢失。
变量:变量代表着一块内存空间,我们可以通过变量名称向内存存/取数据,有变量就不需要我们记忆复杂的内存地数据类型。
1.变量的作用?
变量是用来存储数据,存储的对象不同,所占的存储空间也不同。
2.变量的声明?
A)数据类型 变量名称; int age;
变量的赋值 age=18;
B)定义时赋值,数据类型 变量名称=值;
int age = 18;
C)如果一次要声明多个相同类型的变量可用逗号分隔.
string zsName,lsName;
变量一定要遵循“先声明,后使用”原则。
3. 变量的特点
A) 不能被重复声明 B) 可以重复的赋值
4. 变量的命名规则
A)必须以字母、美元符号($)或者下划线_开头.
B)后面可以任意“字母”、数字、下划线.
注意: A) 声明的变量名不能和系统关键字重复;
B) 区分大小写;
C) 同一个变量只能定义一次;
D) 变量明的定义尽量做到见名知义;
什么叫做关键字?凡是你写出来之后 发现它变成蓝色的,都是关键字 关键字就是这个单词 vs已经用了,你就不能再用了
5.变量的命名规范
Camel命名法:首个单词的首字母小写,其余单词的首字母大写。totalCycle
适用于本地变量和方法参数
Pascal命名命名规范:A)每一个单词第一字母都大写; CarDesk
B)如果使用到英文单词的缩写,全部用大写! IO
适用于 类型名和成员名
6. 常见的数据类型
int: (整数) 1,250,520
double: (小数) 3.1415926,1.4142135623731
char : (字符) ‘A’ ‘b’ ‘a’ ‘钱 '
string : (字符串) “老赵” ,“HelloWorld” "a"
decimal:(金钱小数)存储金钱 5.62m
注意: A)char 最多能存储一个字符,最少也能存储一个字符;
B) double和decimal都是小数,但是精度不同;
C)decimal是128位(28位精度)的数据类型,适合于财务计算和货币计算。
D)在C#开发环境中,直接写一个有小数点的数字,这个数字是double类型的。
在一个小数后面加一个m/M,就告诉编译器这个数字是decimal。
7. 赋值运算符和复制表达式
赋值运算符 =
=不是等号的意思,它表示把等号右边的值,赋值给等号左边的变量。A=90;
赋值表达式
有等号=连接的表达式就是赋值表达式;
注意:每个表达式都可以求解出一个值来,对于赋值表达式,我们就认为,等号左边的变量的值就是整个赋值表达式的值。 a=a+10;
变量可以重复赋值,一旦给一个变量赋了新值,那么变量中的老值就不复存在了.
在方法中定义变量,要使用Camel命名法,Main方法也是。
在一个方法中,一般情况下变量只能定义一次,但可以多次赋值,再次赋值时会把变量中原有的值覆盖掉。
8. “+”在C#中的两重意义
A).是数学中的加法运算:两边参与加法运算的数据类型为数字类型,则“+”表示数学上的加法的意义
B).是连接意义:两边参与加号运算的数据,有一个是字符类型,那么这个“+”就是连接意义
string a = "1";
int b = 2;
Console.WriteLine(a+b);
输出的值为12
9. 占位符(先挖个坑,在填个坑;)
A) 占位符一定是从0开始,依次递增,不能跳跃;
B) 多填坑不会出现结果,少挖坑会出现异常;
C) 输出的顺序是按照挖坑的顺序输出
在Conslole.Writeline("")中,第一个变量/字符串中可以使用占位符
eg: 我叫小辉,今年21岁了,我的工资是6000元
string name=”小辉”;
int age=21;
decimal money=6000m;
//Console.WriteLine("我叫" + name+ ",今年" + age+ "岁了,我的工资是"+money+"元");
Console.WriteLine("我叫{0},今年{1}岁了,我的工资是{2}元",name, age, money);
Console.Wroteline();有多个参数时,输出都是第一个参数中的内容,从第二个参数开始,都是用来替换第一个参数中的占位符的值,所以从第二个参数开始,要不要输出,就看第一个参数中有没有想过的占位符。
10. 变量的交换
A) 借助第三方变量
int a = 10, b = 5;
int temp;
temp = a;
a = b;
b = temp;
Console.WriteLine("a={0},b={1}", a, b);
Console.ReadKey();
B) 不使用第三方变量
int a = 10, b = 5;
a =a - b;
b = a + b;
a = b - a;
Console.WriteLine("a={0},b={1}", a, b);
Console.ReadKey();
或
int a = 10, b = 5;
a =a + b;
b = a- b;
a = a-b;
Console.WriteLine("a={0},b={1}", a, b);
` Console.ReadKey();
11. 异常不报错
报错:语法出现了问题,程序根本不会运行
异常:语法没有问题,但是在程序运行的过程当中出现了错误。就是咱们俗称的bug
12. 转义字符
当我们需要在字符串中输入一些特殊字符时,比如:半角引号,换行,退格,就需要使用转义字符。
转义符就是在”\”后面加上一个特殊的字符,组成一个有意义的字符;
\" 表示为一个"
\b 表示退格 放在字符串的两端 没有效果
\n 表示换行
\t 对其 tab键
\\ 表示为\
@符号
1)、取消\在字符串中的转义作用,使它单纯的表示为\
2)、将字符串原样输出,用在路径比较多
13.算术运算符及算数表达式
算术运算符: + — * / % (去余数 取模)
算数表达式:由算数运算符连接起来的式子。如:1+1 a-b (变量ab前面已经声明并赋初值)
优先级:先乘除,后加减,有括号先算括号里面的,相同级别从左至右运算
小括号可以无限制的套用,但一定要成对出现。
int chinese = 90;
int math = 80;
int english = 91;
int sun = chinese + math + english;
int avg = sun / 3;
Console.WriteLine("您的总成绩是{0},平局成绩是{1}", sun, avg);
c#中,有五个算数运算符: + — * / % 他们都是二元运算符。
//double pi = 3.14;
//int r = 5;
//double s = r * r * 3.14;
//Console.WriteLine("s={0}",s);
要求:参与运算的两个操作数的类型必须相同,并且经过运算后的结果也与操作数的类型相同。
double tshirPrice = 35;
double trouserPrice = 120;
double totalMoney = 3 * tshirPrice + 2 * trouserPrice;
double disMoney = totalMoney * 0.88;
Console.WriteLine("购物总计:{0},打8.8折后应付:{1}元", totalMoney, disMoney);
14.数据类型的转换
数据类型的转换分为两种,隐式转换和强制转换
在算术表达式中 参与运算的操作数的类型必须一致,也必须和结果的类型一致。如果不一致的话,满足下列条件,会自动发生转换。
1)、类型必须相兼容 都是数字
2)、小的转大的
如果出现大的数据类型转换成小的数据类型是,则要使用强制转换类型
语法格式如下: (待转换的类型)要转换的值;
int result=(int)303.6;
发生强制类型转换结果会丢失精度;
对于不兼容的类型的转换,使用Convent转换。
eg: string str = "123";
double b = Convert.ToDouble(str);
int c = Convert.ToInt32(str);
Console.ReadKey();
当不一致时,满足下面系统自动完条件时,成类型转换 (隐式转换)
两种类型兼容
例如:int 和 double 兼容(都是数字类型)
目标类型大于源类型
例如:double > int
强制转换
对于表达式
如果一个操作数为double型,则整个表达式可提升为double型
Convert不再仅是内存级别的转换,而是考虑数据意义的转换。Convert是一个加工、改造的过程
通过 Convert.ToInt32(能转换成int类型的数据)来把其他类型数据转换成int类型
一切类型都可以转换为string类型
15. 异常捕获
try
{
有可能出现的错误的代码卸载这里
}
catch
{
出错后的处理
}
上面的程序如何执行“
如果try中的代码没有出错,则程序正常运行try中的内容后,不会执行catch中的内容
如果try中的代码一旦出错,程序立即跳入catch中去执行代码,那么ray中的出错代码后面的内容
练习题:
1、定义一个变量存储客户的姓名,然后在屏幕上显示:”你好,某某”.
答案: string name = "王五";
Console.WriteLine("你好" + name);
2、有个叫卡卡西的人在旅店登记的时候前台让他填一张表,这张表的里的内容要存到电脑上,有姓名、年龄、邮箱、家庭住址,工资.之后把这些信息显示出来
答案: string name = "卡卡西";
int age = 20;
string email = "kakaxi@qq.com";
string address = "火影村";
decimal salary = 5000m;
Console.WriteLine("我的名字叫" + name + ",我的年龄是" + age + ",我的邮箱是" + email + ",我的地址是" + address + ",我的工资是" + salary);
Console.ReadKey();
3、定义一个变量存储一个人的年龄(18),然后发现这个人的年龄不是18岁,要把这个人的年龄修改成20岁(本题体会变量可以被重复多次赋值),最后把这个人的年龄输出到屏幕上?
答案 int age = 18;
age = 20;
Console.WriteLine(" 都" + age + "岁了");
Console.ReadKey();
4、定义四个变量,分别存储一个人的姓名、性别(Gender)、年龄、电话(TelephoneNumber)。然后打印在屏幕上 (我叫X,我今年 X岁了,我是X生,我的电话是XX)(电话号用什么类型,如:010-12345)
答案: string name = "张三";
char gender = '男';
int age = 20;
string tel = "123456789123";
Console.WriteLine("我叫{0},我几年{1}岁了,我是{2}生,我的电话是{3}", name, age, gender, tel);
Console.ReadKey();
5、在屏幕上显示我家在…今年..岁了,我的姓名是.. 请定义变量存储上面的值,并显示在屏幕上.
答案: string address = " 河南省洛阳市";
int age = 20;
string name = "张旭辉";
Console.WriteLine("我的地址是{0},我的名字是{1},我的年龄是{2}", address, name, age);
Console.ReadKey();
6、定义两个变量如:number1,number2分别赋值为10和5,写程序交换两个变量的值(两种方法都掌握)
答案:
方法一:借助第三个变量
int a = 10, b = 5;
int temp;
temp = a;
a = b;
b = temp;
Console.WriteLine("a={0},b={1}", a, b);
Console.ReadKey();
方法二:不使用第三个变量
int a = 10, b = 5;
a =a - b;
b = a + b;
a = b - a;
Console.WriteLine("a={0},b={1}", a, b);
Console.ReadKey();
或
int a = 10, b = 5;
a =a + b;
b = a- b;
a = a-b;
Console.WriteLine("a={0},b={1}", a, b);
Console.ReadKey();
7、练习:问用户喜欢吃什么水果(fruits),假如用户输入”苹果”,则显示”哈哈,这么巧,我也喜欢吃苹果”
Console.WriteLine("美女,你喜欢吃啥子水果哟~~");
//Console.ReadLine()这行代码 会返回一个字符串类型的变量 返回的这个字符串就是用户在控制台中输入的内容
string input = Console.ReadLine();
Console.WriteLine("哈哈,这么巧呀,我也喜欢吃{0}", input);
Console.ReadKey();
8、练习:请用户输入姓名性别年龄,当用户按下某个键子后在屏幕上显示:您好:XX您的年龄是XX是个X生
Console.WriteLine("请输入你的姓名");
string name = Console.ReadLine();
Console.WriteLine("请输入你的性别");
string gender = Console.ReadLine();
Console.WriteLine("请输入你的年龄");
string age = Console.ReadLine();
Console.WriteLine("{0}您的年龄是{1},是个{2}生", name, age, gender);
Console.ReadKey();
9、定义两个数分别为100和20,打印出两个数的和。
int numberOne = 100;
int numberTwo = 20;
Console.WriteLine("这个两个数字的和是{0}", numberOne + numberTwo);
Console.ReadKey();
10、计算半径为5的圆的面积并打印出来.(pi为3.14)面积:pi*r*r; Perimeter(周长)
int r = 5;
double pi = 3.14;
double area = pi * r * r;
double perimeter = 2 * pi * r;
Console.WriteLine("半径为5的圆的面积是{0},周长是{1}", area, perimeter);
Console.ReadKey();
11、练习3:某商店T恤(T-shirt)的价格为35元/件,裤子(trousers)的价格为120元/条.小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱?
打8.8折后呢?
int t_shirt = 35;
int trousers = 120;
int sum = t_shirt * 3 + trousers * 2;
Console.WriteLine("总计花费{0}元", sum);
double dzhSum = sum * 0.88;
//303.6 将303.6 转成303
Console.WriteLine("打8.8折后的价格是{0}",dzhSum);
Console.ReadKey();
12、练习,编程实现计算几天(如46天)是几周零几 天.
练习,编程实现计算几天(如46天)是几周零几 天.改成提示用户输入天数
Console.WriteLine("请输入一个天数");
// string strDays = Console.ReadLine();
int days = Convert.ToInt32(Console.ReadLine());
// int days = 46;
int weeks = days / 7;//求得周数
int day = days % 7;
Console.WriteLine("46天是{0}周零{1}天", weeks, day);
Console.ReadKey();
Console.WriteLine("请您输入天数");
int num = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("{0}周,{1}天?, num / 7, num % 7);
Console.ReadKey();
13、练习:编程实现107653秒是几天几小时几分钟几秒?
int seconds = 107653;
int days = seconds / (3600 * 24);
int mod = seconds % (3600 * 24); //除去计算天数所用的秒,
int h = mod / (3600);
mod = mod % 3600;
int min = mod / 60;
int sec = mod % 60;
Console.WriteLine("{0}秒里包含{1}天{2}小时{3}分{4}秒", seconds, days, h, min, sec);
Console.ReadKey();
六、表达式
1. 算术运算符和复合赋值运算符
++ 自加一 有前加和后加
-- 自减一 有前减和后减
一元运算符++/--比二元的+-优先级高
+= -= *= /= %=
对于+-*/%=都需要两个操作数才能进行运算的这些运算符,我们叫做二元运算符;
对于像++ -- 这样的只需要一个操作数就能进行运算的运算符,我们叫做一元运算符.
2. 关系运算符(比较运算S)
>,<
==(等于,相等),!=(不等)
>=(大于等于,包含),<=(小于等于,包含)
结果为true或false 判断一个东西,如果是真的就是True,如果是假那就是Flase.
关系表达式:由关系运算符链接起来的式子
3. 布尔类型和布尔表达式
真:ture
假:false
关系表达式的运算结果为bool类型,bool类型只有两个值,一个是ture,一个是false。
如果关系运算表达式成立,则这个表达式的值为ture,否则为false
int zsage = 20;
int lsage = 18;
bool isRight = zsage < lsage;
Console.WriteLine(isRight)
4. 逻辑运算符和逻辑表达式
&&(逻辑与) ||(逻辑或) !(逻辑非)
A) 逻辑与运算:&&
bool isRight = 表达式1 && 表达式2
逻辑与连接的两个表达式,要能够求解成bool类型,一般情况都是关系表达式
整个逻辑与运算的结束也是bool类型
表达式1 表达式2 逻辑与结果
ture ture ture
false false false
false ture false
ture false false
当两个表达式全为ture时,结果才为ture
int age = 20;
int weight = 120;
bool result = age >= 18 && weight >= 100;
Console.WriteLine(result);
输出的结果为Ture
int age = 10;
int weight = 90;
bool result = age >= 18 && weight >= 100;
Console.WriteLine(result);
输出的结果为False
B)逻辑与运算:||
bool isRight = 表达式1 || 表达式2
逻辑与连接的两个表达式,要能够求解成bool类型,一般情况都是关系表达式
整个逻辑与运算的结束也是bool类型
表达式1 表达式2 逻辑与结果
ture ture ture
false false ture
false ture ture
ture false false
只要有一个为ture,其结果都为ture
//让用户输入张三的身高和体重
//火车站规定,一个人的身高>=120厘米或者体重>=50kg就必须买票
//需要买票输出ture,不需要输出false
Console.WriteLine("请输入您的身高(cm):");
int high = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入您的体重(kg):");
int weight = Convert.ToInt32(Console.ReadLine());
bool result = high >= 120 || weight >= 50;
Console.WriteLine(result);
C) 逻辑非:!
这是一个一元运算符.
用法:
!(布尔类型的表达式)
作用:
如果:
布尔类型的表达式的表达式为ture,加!号后,其整个式子的结果为false.
布尔类型的表达式的表达式为false,加!号后,其整个式子的结果为ture.
Console.WriteLine(!result);
输出结果想反,真变假,假变真
表达式 !表达式
True False
False Ture
七、选择语句
1. if 语句
if 结构的基本语法
if (条件)
语句1;
执行过程:
首先判断条件的结果,如果田间为Ture,则执行语句1.如果条件为False,则跳过语句1.执行后面的语句.
执行流程图:
注意:
1.if如果括号中的条件,要能计算成一个bool类型的值.
2.默认情况下,if语句只能带1句话.即和if语句有关系的语句只有1.
//if语句基本用法
int a = 3;
if (a > 10) //这里没有;号
Console.WriteLine("成立"); //if默认只带这一句话
Console.WriteLine("程序结束"); //这句话和if没关系