c#是由微软公司开发的一种面向对象且运行于.NET Framework之上的高级程序设计语言
简洁流畅的语法/精心的面向对象设计/与Web结合紧密/严格的安全性与强大的错误处理能力/优秀的版本处理技术/良好的兼容性
Console.WriteLine(“Hello Tomorrow”);
在控制台中对应:类名/函数名称/参数
添加注释增加程序的阅读性:
/**/ //
机器语言:0和1组成/难写,难读,难修改,难记忆
汇编语言:把机器语言符号化/处理很多和硬件相关细节,工作仍然非常沉重
高级语言:将大量相关细节封装为一条语句。人们先用高级语言编写源代码,然后通过编译器把源代码编译为机器语言运行
C#的编译:C#源代码/微软中间语言(MSIL)/机器语言
计算机中常用:二进制/八进制/十进制/十六进制
不带下标的默认为十进制数
Convert.ToString(89,2)
89-原数 2-基数
比特(bit),也叫做位,简称b
比特用小写字母b表示,字节用大写字母B表示
8个位组成一个字节(Byte)1B=8b
一个字节可以表示为0-255的所有整数,共256个数
1KB=1024B
1MB=1024KB
1GB=1024MB
程序的核心是数据处理,数据的表现形式是各种变量
求和:sum 求差:dif 求积 pro 求商:quo
int型变量:占4字节空间,32位。为表示负数,把最高位定义为符号位,0表示正数,1表示负数
整型是以补码表示的。正数的补码是它本身,求负数补码的方法:
1.将该数的绝对值表示成二进制形式
2.按位取反(1变0,0变1)
3.再加1
对于较小的整数,可以用short型存储
short型占用2个字节,最高位表示正负号,后面的15位表示数值大小,取值范围-32768~32767
long型变量占用8个字节,最高位表示正负号,后面63位表示数值大小,-9223372036854775808~9223372036854775807
实数型变量
实数也称为浮点数。三种实数变量类型:float/double/decimal
字符
字符包括英文字母,希腊字母,特殊符号,汉字,0~9十个数字符号
C#中用双引号标记字符串,单引号标记字符
字符变量用来存储一个字符,用关键字char声明
字符串的输出
Console.WriteLine() 自动换行
Console.Write() 不换行
Console.ReadLine() 用来读取一条字符串
美国信息交换标准码。扩展ASCII码,使用8位二进制表示256个字符
static void Main(string[] args)
{
//把一个字符转化整数,从而得到字符ASCII码
int code = (int)'A';//转化方法:在字符前加(int)
Console.WriteLine("A->{0}",code);
}
@控制符,将内容完整打印输出,不受转义字符干扰
变量的格式化输出:
“{0,6}\n+{1,5}\n———\n{2,6}”
第一行宽度为6个字符
1.第一个字符必须是:字母,下划线,汉字或@
2.其后的字符可以是字母,数字,下划线或汉字
3.变量不能和关键字重名,取关键字的名字:@int等形式
注意“C#中变量的命名区分大小写,Name和name是两个不同的变量
命名好习惯:
1.尽量选择有意义的名称
2.采用驼峰式方式命名
基姆拉尔森公式
y-年 m-月 d-日
int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7
赋值运算符:= += -= *= /= %=
(1)隐式转换
任何整数类型都能够隐式的转换为任何浮点类型
整型转换为浮点型在某些情况下精度不够准确
(2)显式转换
异常检查:checked
环境异常检查:项目—属性—生成—高级—检查运算上溢下溢
(3)字符串和数值间的转换
数据结构+算法=程序
数据结构着重算法中使用的数据存储结构。整数型,实数型,字符串型/字符型
算法:方法步骤流程之类
顺序结构
逻辑表达式:
比较两值大小关系的运算符称为关系运算符
小于/大于/小于或等于/大于或等于/等于/不等
关系运算符可以和其他运算符一起构成逻辑表达式
且(and)&&
或(or)||
非(not)!
布尔变量:
逻辑表达式”真“和”假“两种结果,用布尔表达式true和false
布尔型变量用关键字bool声明
选择结构:根据条件进行抉择的逻辑结构
多分支选择结构
嵌套选择结构
多分支选择结构(switch语句)
switch语句的遍历:需要把break语句换成goto语句
条件表达式
循环结构(while语句)
死循环:如果条件永远为真,将会造成死循环
循环结构(do-while)
循环结构(for语句)
for(初始值;循环条件;自增)
{
//循环体
}
break语句和continue语句的区别:
break语句:跳出循环结构
continue语句:中断本圈循环
枚举类型用关键字enum定义
enum WeekDays {Sunday,Mondey,,,,}
关键字 类型名 枚举项(逗号隔开)
结构体
数组:
如果只想声明一个数组而不同时进行初始化,则可用下面的语句:
foreach循环语句:
foreach语句是针对于集合的循环语句,和for类似,但语法更简单。foreach语句把数组看做一个集合,然后依次从集合里取出元素,进行处理。
foreach(string(元素类型) name (元素)in friendNames(数组))
二维数组
可变数组
在二维数组中,每一行的长度都是相同的,声明每行长度不同的数组为可变数组
函数:是一段被封装起来的能实现一定功能的代码
static string CalculateWeekDay(int y, int m, int d)
静态/返回类型/ 函数名称 / 参数列表
函数的命名方式:
.NET推荐采用PascalCasing(帕斯卡式)方式为函数命名,所有单词首字母大写
返回值:
如果在函数A( )中调用函数B( ),则函数A( )称为主调函数,函数B( )称为被调函数。例子:Main( )是主调函数,CaculateWeekDay( )是被调函数
return语句要注意的几点:
(1)返回值的类型要和函数定义的返回类型一致,或者返回值的类型可以隐式转化为函数的返回类型。
(2)可以用return语句直接返回表达式
(3)函数可以没有返回值,这时函数的返回类型为void。比如下面函数的功能是输出两只小兔子,没有返回值。
(4)函数中可以有多个return语句,先执行到哪个,哪个起作用。
函数的参数传递方式:
传递方式:值传递,地址传递
地址传递:复杂类型的参数传递/引用型参数传递/输出型参数传递
输出型参数:
一个函数的可能产生多个有价值的计算结果,而使用return语句只能返回一个数据。
引用型参数(ref)能改变实参的值,天然的能将计算结果反馈到主调函数中。除了引用型参数外,还可以使用输出型参数(out)返回有用的计算结果。
out和ref用法几乎完全一样,二者只有一个区别:
ref型参数传入函数前必须赋值;
out型参数传入函数前不需赋值,即使赋值也被忽略。
out型参数只能用来从函数返回结果,而不能用来向函数传递数据。在函数结束前,必须为out型参数赋值。
调用函数时,实参和形参的类型应当匹配。如果不匹配,编译器将尝试进行隐式转化,把实参提升到形参类型。如果实参不能转换为形参的类型,编译器报错。
递归调用:
函数反复调用自身的行为成为递归调用。递归调用常常能简便的解决某类复杂的问题。数学里的递推公式就可以用递归调用解决。
递推公式包含两个要素:递推关系和初始值,在实现递推公式的递归函数中也要包括初始值和递推关系两个要素。
斐波那契数列:
局部变量:
在函数内部定义的变量,只在该函数内部有效,它的作用域从定义的地方开始,直到函数结束为止。在调用函数时,变量在内存中创立,当退出函数时,变量从内存中清除,因此称为局部变量。
程序块中的局部变量
结构化编程思想:
C语言把重点放在写函数上,较大的任务被分解成若干小任务,每个小任务均由函数实现,这种分而治之的编程思想称为结构化编程。
程序包含两类基本元素-数据和函数。结构化编程注重函数的实现过程,数据的存在只不过是为函数提供支持,所以这种编程方式是面向过程的。结构化编程思想曾经对软件业的发展起了巨大的作用。
面向对象编程:
面向过程的基本要点是自顶向下的按照功能把软件分解为不同的模块,并用函数实现这些模块。然而在进行模块分解时很难保持各模块的独立性,以函数为基本单位的设计模式使得程序员在设计模块时很难排除其它模块的影响。
面向对象编程是一种强有力的软件开发方法,在这种方法中,数据和对数据的操作被封装成“零件”,人们用这些零件组装程序。面向对象编程的组织方式和人们认识现实世界的方法一致,符合人们的思维习惯,大大减轻程序员的思维负担;有助于控制软件的复杂性,提高软件的生产效率。
每一类事物都有特定的属性,每类事物也都有一定的行为。
面向对象编程也采用了类的概念。在类中,用数据表示事物的属性,用函数实现事物的行为,数据和事物是一个统一的整体,这就使编程方式和人的思维方式保持一致,极大的降低了思维难度。
封装:
类一旦被设计好,就可以像工业零件一样,被成千上万的对其内部原理毫不知情的程序员使用。类的设计者相当于汽车工程师,类的使用者相当于司机。程序员可以充分利用他人已经编写好的“零件”,而将主要精力集中在自己的专门领域。
接口:
在面向对象编程中,只要保持接口不变,可以任意更改类的实现细节,用一个设计更好的类代替原来的类,实现类的升级换代。类的这一编程思想极大的方便了程序的维护和修改,降低了软件成本。
对象:
类是一个抽象的概念,对象则是类的具体实例。类是抽象的概念,对象是真实的个体。一般情况下我们认为属性是描述具体对象而非描述类的,行为是由具体对象发出的而非类发出的。
创建对象:
Kitty
Doraemon
Gaffield
互不相关,独立占据内存空间
构造函数:
创建对象时,系统先为对象的成员变量分配内存,然后通过构造函数初始化对象的成员变量。
1.默认构造函数
每个类都有一个默认的与类同名的构造函数。当创建对象时,系统会调用默认的构造函数,用默认值初始化所有成员变量。比如整型变量的初始化为0,实型变量初始化为0.0,布尔型变量初始化为false,字符串变量初始化为null(空),等等。
2.带参数的构造函数
除了默认构造函数,我们还可以定义带参数的构造函数,带参数的构造函数可以把类的原变量初始化为指定的值。
3.无参数构造函数
当我们自定义了构造函数后,默认构造函数就失效了,要想继续使用无参数的构造函数,必须显示定义。
不用的对象要及时删除以释放内存空间,在传统的面向对象设计中用类的析构函数(Destructor)删除对象。