做.net开发有5年了,经历了asp+access,.net+sqlserver,MVC+EF等开发模式,最近打算系统巩固一下。
有不对的地方希望大家指出,还有落下的知识点也请提供下,谢谢。
C#、.Net以及IDE简介
一、什么是.Net?
.Net指 .Net Framework框架,一种平台,一种技术。
.Net Framework框架是.Net平台不可缺少的一部分,它提供了一个稳定的运行环境来保证我们基于.Net平台开发的各种应用能够正常运转。
.NET Framework 由.NET Framework类库和公共语言运行时两个主要组件组成
CLR(公共语言运行库): 是管理用户代码执行的现代运行时环境,它提供JIT编译、内存管理、异常管理和调试等方面的服务
CTS(通用类型系统):定义声明、定义和管理所有类型所遵循的规则,而无需考虑语言
CLS(公共语言规范):是所有针对.NET 的编译器都必须支持的一组最低标准,以确保语言的互操作性即时(JIT)编译器将MSIL代码编译为特定与目标操作系统和计算机体系结构的本机代码
二、什么是C#?
C#是一种编程语言,可以开发基于.Net平台的应用。
.net 是一种多语言开发的平台 vb c++ F# 等,主要使用C#编程语言进行开发。
三、.Net能干什么?
1、桌面应用程序(Winform),就是软件。
2、Internet应用程序(ASP.NET),就是网站。
3、手机开发 wp8
4、Unity3D 游戏开发
四、.Net交互模式
C/S:Clinet/Server,客户端对服务器,需要安装在电脑上的软件。
B/S:Browser/Server,浏览器对服务器,不需要安装在电脑上,通过网页打开。
五、什么是IDE?
IDE 是指我们使用的开发工具,visual studio就是最常用的一种。
visual studio使用
启动方式:双击图标、命令:devenu
创建控制台项目:新建项目 c# 控制台 右上角.net framework 版本 项目名称
解决方案关系:解决方案中包含多个项目,项目中包含多个文件,文件中命名空间包含类,类中可以包含方法,方法中包含程序代码。
.sln后缀的文件是解决方案文件,包含整个解决方案的信息。类文件以.cs结尾。
.csproj 项目文件里面包含项目的信息。
解决方案 右键 新增项目 新建项目追加到解决方案 多个项目时 可以设置某个项目为启动项目 启动时自动启动该项目 项目可以卸载 和追加 当执行编译时 不再检查已卸载的项目 工具->导入导出设置 中有个重置开发环境, 设置下可以设置字体 行号。
常用快捷键:ctrl+k+d全部对齐 | ctrl+k+f部分对齐 | ctrl+s保存 | ctrl+shift+s全部保存 | ctrl+c复制 | ctrl+v粘贴 | ctrl+z撤销 | ctrl+y前进 | ctrl+j智能提示 ctrl+w+e代码自动折行 等等。
六、Main方法
Main方法是程序的入口方法。 执行一个程序时,首先找到main方法,从main方法中第一句程序开始执行,当main方法执行完毕后程序就结束了。 一个程序只能有一个main方法
输入输出
Console.WirteLine(); //向控制台输出一句话。Console.ReadLine(); //向控制台输入一句话。
每一句代码以;结束
启动方式:f5带调试启动,shift+f5不启动
生成解决方案编译项目F6
八、xmind 绘图软件
新建空的 tab键 新增子节点 回车键 新增兄弟节点
F7快捷截图 F8预览
基础语法
一、注释
// 单行注释 ctrl+k+c ctrl+k+u取消
/* */ 多行注释
/// 文档注释
#region #endregion 折叠代码
二、软件系统依赖关系
windows操作系统 -> 公共语言运行库CLR -> .Net Framework 类库 -> C# -> CLS公共语言规范 -> 翻译为中间IL语言时遵循的规则CTS通用类型系统 -> 拥有定义好的类型
三、变量
用来在计算机中存储数据,存储于内存中。内存是临时存储数据 断电时内存中数据丢失
编写的代码存在内存中, 保存后从内存中保存到硬盘中 变量代表着一块内存空间,可以通过变量名称向内存中存/取数据。
1、声明变量
数据类型 变量名;
例:int a; string b; double c;
2、变量赋值
变量名=值; 其中"="为赋值运算符,把右侧值赋給左侧变量。
例:a = 1;b = "asd";c = 2.13; 优先级最低a=a+1;算完在赋值;
3、声明并赋值
数据类型 变量名 = 值;
例:int a = 1;
变量可以重复赋值,以最后一次为准,但不可以重复声明 变量必须先声明后使用
四、数据类型
整型:int、浮点数:double、字符:char、字符串:string、货币:decimal。
double 精度15~16位,16后不再显示, decimal精度29 后面加m/M否则按double类型报错。
五、变量命名规则
[email protected]跟数字、字母、下划线。
不可以与系统关键词重复、大小写敏感、不可以重复定义。
如果缩写单词全部大写ICBC,多个单词第二个单词大写首个小写fuckYou? 或每个都大写FuckYou!
六、“+”号的使用
“+”数字相加(左右都是数字) 例:1+1
“+”字符串链接(有一个是字符串) 例:string result = "haha" + 123;
七、占位符
"我叫{0},身高{1}",one,two; 右侧保证与左侧占位符个数相同 否则报错
console输出中","后面都是用来替换占位符的
八、变量交换
int a = 5,b = 10,temp;
temp = a;
a = b;
b = temp; // 完成交换
九、转义字符
由\加上一个字符组成可以输出的特殊字符
\"输出引号 \n换行 \b退格 backspace键 删除前一个 \t tab键 行对齐 \\ 输出\
[email protected]\不再转义,字符串可以换行,输出“时用两个“
十、算术运算符
+ - * / % 二元运算符 两个数字运算
十一、算术表达式
由运算符链接两个数组成表达式 a+b
十二、类型转换
隐式类型转换:也叫自动转换,当目标类型大于源类型时发生转换。(小的转成大的)
显示类型转换:也叫强制转换,把double强制转换成int不要小数点【(数据类型)值】(大的转成小的)
(int)string 右侧string必须是整数才可以转换。
Convert转换
Convert.ToInt32(带转换字符串); //转换为Int;
Convert.ToString(number); //转换为字符串
类型都有一个.ToString() 也可以用这个方法转换为字符串
十三、可空类型?
int? a = null; 表示a的值可以为null使用
十四、异常处理
try{}catch 可能有错误的try中 报错进入catch
运算符
一、一元运算符
++ 自增 -- 自减
后++;age=18; sum = age++ -10; age++取前值先算age-10 运算后 再运算age++; age=19 sum=8;
前++; ++age - 10 ++age 取新值 先+完
二、复合赋值符
+= += *= /= %=
age+=3; 自加3 类似:age=age+3;
三、关系运算符
>大于 <小于 ==等于 !=不等于 >=大于等于 <=小于等于
两个数的操作称为二元运算符
四、布尔类型
bool 类型只有两个值:真true、假false。
关系运算的结果是布尔类型的
五、逻辑运算符
&&与 : 左右表达式都成立则为true
|| 或 : 左右表达式有一个成立就为true
! 非 : 不成立则为true
六、三元运算符
a1= =a2 ? "a" : "b" 成立输出a 否则输出b
分支结构
一、If
if(判断条件)
{
要执行的代码;
}
判断条件一般为关系表达式或bool类型的值,如果判断条件成立则执行大括号内代码。
二、If-else
if(判断条件)
{
成立的代码
}else {
不成立的代码
}
如果判断条件成立,执行大括号内代码,否则执行else内代码。
三、If-else If
用来处理多条件的区间性判断
if(a=1){}else if(a=2){}else if(a=3){}else{}
你懂的一直判断有没有 实在没有就else。
四、Switch-case
用来处理多条件的等值比较
switch (num)
{
case 1: 如果1
1
break;
case 2: 如果2
2
break;
default: 否则
other
break
}
循环结构
一、While循环
先判断再执行
int i = 0;
While(i<100) //条件
{
i++;
if(i==50)
break; //跳出循环
}
二、do-while循环
先执行再循环
do
{
i++;
}while(i<50);
三、for循环
for(int i = 1;i<10;i++){
console.writeline(i);
}
四、foreach循环
foreach(var item in list){
console.writeline(item.xx);
}
循环的集合 见第二章 都是循环就放这了 大量数据情况下 没有for效率高
五、break、continue和goto
break 立即跳出循环
continue 结束本次 继续下次循环
goto跳转到指定位置
常量、枚举、结构以及数组
一、常量
不可改变的值
const 类型 名=值
const pi=3.14;
二、枚举
限制赋值 在定义枚举时的集合中选值
public enum Gender //定义枚举
{
男,
女
}
Gender gender = Gender.男; //枚举赋值
定义枚举时,值不能是int类型的,那样做没有意义。
枚举转换为int
枚举的类型可以跟int类型互相转换,枚举类型与int类型相兼容。
枚举的值在定义时是有一个默认编号的,从0开始。
(int)Gender.男; //值为0 女为1 每次递增1
改变枚举的默认值定义时赋值,则默认从此值开始。
public enum Gender //定义枚举
{
男=2,
女
}
这时(int)Gender.男 值为2,女则为3.
枚举类型转换
int转换为枚举
Gender gender = (Gender)n1; n1为0时则输出男。
string类型转换为枚举
Gender gender = (Gender)(Enum.Parse(typeof(Gender),"男"));
三、结构
public struct Person //定义结构
{
public string name; //定义字段
public string tel;
}
Person zsPerson; //使用结构
zsPerson.name = "zs"; //结构赋值
zsPerson.tel = '138484848448';
四、数组
声明数组并指定长度
数据类型[] 数组名=new 类型[数组长度];
赋值 数组名[0]=1;
从0开始 int类型数组 默认值0
数组名.length 获得数组长度
int [] nums = new int[10]; //定义数组
nums[0] = 1;
nums[1] = 2; //赋值
int lengt = nums.Length; //得到长度
for (int i=0; i< nums.Length; i++) // 遍历取值
声明时直接赋值不指定长度
string[] names = { "zhangsan", "lisi", "wangwu" };
string[] names = new string[3] { "zhangsan", "lisi", "wangwu" };
数组长度需要和值长度相等 就是不能不符
string[] names = new string[] { "zhangsan", "lisi", "wangwu" }; //可以省略数组长度
五、冒泡排序
让数组中的元素两两比较(第i与第i+1比较)经过n(个数-1)次比较
从大到小排序 用小于比较 成立就交换
方法
方法就是将一堆代码进行重用的一种机制,可能有输入的值,返回的值,执行后返回结果。
方法一般定义在类中,如果方法没有返回值则使用void。
{
}
//调用 数组长度可变
test("a",12,12,12);
test("b",13,2);
if(n<=0){
return 0;
}
return n + Sum(n-1);
} //1+2+3+..+n和
- 3楼L1916
- 第五点中的“int number2 = int.TryParse(quot;a12quot;, out result); //第一转换字符串,第二返回转换是否成功;”有误 number2应该为bool型,
- Re: 海盗船长
- @L1916,谢谢帮忙检查 确实是。。
- 2楼永恒の云
- 目录党
- Re: 海盗船长
- @永恒の云,多谢
- 1楼~渴死的鱼
- 总结得好到位
- Re: 海盗船长
- @~渴死的鱼,谢谢支持