C#基础知识点
1.net
1.1平台无关:应用程序→.Ner Framework→CLR→操作系统
1.2更安全、更省心:代码托管、罕用指针、垃圾回收。
1.3语言无关:VB.Net、C#都调用同样的类、同样的方法。
2.控制台
唯一需要学的三条控制台指令:Console.WriteLine(打印输出)、Console.ReadLine(从控制台读入一行)、Console.ReadKey(控制台暂停)。
3.C#语法
从上到下一条条的依次执行
大小写敏感
函数参数用()包围
两句代码之间必须用;(英文 半角)分割
单行注释// 多行注释/* */
4.变量
把变量看成放数据的容器
定义变量的方式:类型 变量名;
变量的类型:不同的类型存放不同的变量
变量的名字不能重复,第一个字符必须是字母或者下划线,其后的字符可以是任意的字母数字下划线
不能全部使用C#关键字(亮蓝色)
中文(类名,函数名)
5.运算符、表达式
+,-,*乘,/除,%求余
+可以用作字符串连接,其他不可以
++自增,--自减
括号解决运算符优先级的问题
变量可以和字面量混合运算
6.赋值
赋值运算符=,让左边变量的值等于右边的计算结果
7.布尔运算
相等判断:==,不要和=混淆。
不等判断:!=
大小比较:< 、>、<=、>=
取反:!
组合运算:&&(并且):只有两边都为true的时候,表达式的值才为true,否则是false
||(或者)两边只要有一个为true的时候,表达式的值就是true,否则是false
8.if else
单句的时候大括号可以省略,但是不建议省略
9.switch case 语句
被判定的值进入满足条件的分支执行
case中的值必须是常量,不能是变量、表达式
类似于if else,但是是离散值的判断,switch一般都可以用if重写,但是if不一定能用switch重写
C#中的break不写是不行的,除了合并case的情况
10.while循环
do while 先做,再执行代码
11.循环的中断
return:当执行到return的时候就退出了整个函数(Main),while也就不会再执行下去了。而控制台程序一旦Main退出,程序就退出了(终止当前执行的函数,后续的所有代码都不会被执行)
break:立即终止整个循环(终止While循环,继续while后面的代码)
continue:立即终止当前的循环步骤,进行下一次循环步骤(终止while本次循环,继续while后面的代码)
12 for循环
for(code1;code2;code3)。
code1:循环的初始化代码,只在循环开始之前运行一次;
code2:bool类型的表达式,每次循环完成后都判断一下是否为true,只有为true才能进行下一次循环
code3:在每次循环之后都执行一次
for的三段都可以省略,但是不能丢了“;”。
break、continue同样可以应用于for。
for和while代码之间都可以相互转换,究竟用哪种方式则取决于一些惯用用法和个人习惯,不用记,代码写多了自然有感觉。
13.类型转换Cast(*)
把源类型赋值给目标类型,两个类型不一致时会发生类型转换。
当目标类型一定能满足源类型转换过去后的要求的话就是隐式转换;当目标类型不一定能满足源类型转换过去后的要求的话就需要显式转换(后果程序员自己负责)。
为什么需要显示转换?编译器不能保证一定正确,转换结果自己负责,编译器不承担这个责任,由开发人员负责。
只有在内存存储上存在交集的类型之间才能进行Cast,否则则不可以,比如不可以int i;string s=(string)i;反之也不可以,必须使用Convert类提供的方法。
13.类型转换Convert
Convert不再是内存级别的转换,而是考虑数据意义的转换。
Convert是一个加工、改造的过程。
Convert.ToInt32、Convert.ToString、每种类型都还有ToString方法(类型的ToString和Convert.ToString略微的差别)
14.枚举
确定数量、确定值的几个取值:东西南北、男女、上下中等。
enum Gender{male,female}
enum QQStatus{online,offline,hidden}
枚举的用法,QQStatus status=QQStatus.online;
和用字符串比起来,用枚举的好处就是限定了变量的取值范围,程序处理起来更方便。
15.数组
多位数组是指可以用多个下标访问的数组,声明时方括号内加逗号,就表明是多维数组,有n个逗号,就是n+1维数组。
语法 type[,] arrayName
初始化二维数组为默认值
int[,] arr=new int[3,2];
初始化二维数组为指定值
int[,] arr=new int[3,2]{{1,2},{3,4},{5,6}};
一维数组
保存多个值。几乎任何类型都可以声明数组。
int[] nums={5,3,8};
int[] nums=new int[3]{5,3,8};
使用索引器访问指定编号位置的元素,访问数组元素:nums[0]、nums[1]。索引从0开始。取到的元素的类型就是数组元素的类型。还可以对数组元素进行赋值。
16.数组循环
foreach
strin[] names={"tom","jerry","lily“};
foreach(string name in names)
{
Console.WriteLine("我的名字{0}“;name);
}
和for的区别:for可以不逐个遍历,比如每隔一个遍历一个,或者可以从后向前遍历
17.函数
函数就是将一堆代码进行重用的一种机制。函数就是一段代码,这段代码可能有输入的值(参数),可能有返回值。一个函数就像一个专门做这件事的人,我们调用它来做一些事情,它可能需要我们提供一些数据给它,它执行完成后可能会有一些执行结果给我们。要求的数据就叫参数,返回的执行结果就是返回值。
Console.ReadLine就是一个有返回结果的函数
Console.WriteLine(“Hello”)就是一个有执行参数的函数,只有告诉WriteLine被打印的数据他才知道如何打印;int i=Convert.ToInt32("22")则是一个既有参数又有返回值的函数。
有了函数写代码就像拼积木,C#中的各种各样的技术其实就是通过for、if等这些基础的语法将不同的函数按照一定的逻辑组织起来。
自己写函数
读取输入的整数,定义成函数,多次调用
static int ReadInt()
{
string s=Convert.ReadLine()
return Convert.ToInt32(s);
}
写程序测试,程序调用到函数的时候是进入函数内部执行的,执行完毕再继续向下执行。
函数如果没有返回值则标记返回值类型为void
return语句:导致函数立即返回。在返回值为void的函数中return,在返回值非void的函数中return数值。
函数和类的名字大写开头;参数和变量的名字小写开头,而且要有意义。
18.可变参数
参数数组:int sum(params int[] values) int sum(string name,params int[] values)
可变参数数组必须是最后一个
参数默认值(.Net4.0):void
19.函数重载(函数重名)
参数类型不同或者参数个数不同(不严谨的),与返回值无关。
20.命名空间
C#程序中的一种组织代码形式,主要用来标识类的可见范围。
语法 namespace 命名空间
引用
(1) using 命名空间名;(分号不能少)
(2) 命名空间.命名空间包含的类来调用
类
一种数据结构,它可以包含数据成员(常量和域)、函数成员(方法、属性、事件、索引器、运算符、构造函数和析构函数)和嵌套类型。
类(class)实际上是对某种类型的对象定义变量和方法的原型,它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。
语法 类修饰符 class 类名
{
//类中的代码
}
21.关键字
22.标识符 类名,变量名,方法名,数组名…… 其实就是名字;标识符不能与C#关键字冲突,区分大小写;命名规则 首字母 字母、下划线_ 其余部分 任意多的数字、字母、下划线 23.Main方法 程序的起动机、入口点,使用多个Main方法需在启动对象设置中指定启动入口的Main方法。 Main方法必须定义为static Main的首字母必须大写 返回值可以是void或是int 命令行参数可选(可以删除,不需要用DOS环境) 24.构造函数与析构函数 构造函数是在创建给定类型的对象时执行的类的方法,构造函数具有与类相同的名称,它通常初始化新对象的数据成员。 public Program() { z=x+y; } 析构函数是以类名加~来命名的。.NetFramework类库有垃圾回收功能,当某个类实例被认为是不再有效,并符合析构条件时,.NetFramework类库的垃圾回收功能就会调用该类的析构函数实现垃圾回收。 ~Program() { Console.WreiteLine("析构函数自动调用"); } 25.int double bool char为基本类型,加ref为共用; 对于引用类型加ref和不加ref使用上没有区别(用class做出来的基本为引用类型); string为引用类型,但由于string的不可变性,划为基本类型使用,必须加ref才能共用。 out Haskell 函数全是由递归完成 class仅是定义,是自定义的引用类型,使用class需要实例化(new)