C#学习笔记.docx
《C#学习笔记.docx》由会员分享,可在线阅读,更多相关《C#学习笔记.docx(99页珍藏版)》请在冰点文库上搜索。
C#学习笔记
第一天:
C#是微软公司开发的一种编程语言。
2000年6月发布。
C#是一种面向对象语言(oop:
ObjectOrientedProgramming)
---------------
C#与JAVA类似,是从C,C++改进来的。
特点:
简单,现代,是面向对象的程序,强大、灵活,包含单词为数不多,是模块化的,C#将流行。
(枯燥无味的特点,个人认为有待于进一步验证。
)
模块化的,建立了类的概念。
类可以被重复使用,通过给类或方法传递信息,得到所需结果。
---------------
编程前的准备工作:
首先要明确问题,然后制定解决问题的方案。
方案实现后,对结果进行测试,以了解问题是否得到解决。
(相信很多菜鸟刚接触编程的时候很迷茫,其实很大程度上是没有明确自己要干什么,要解决什么问题。
有了问题才能有相应的解决方法。
而编写一个程序,就是把解决方法通过编程语言来实现。
)
SO,编写一个程序的步骤:
1.明确编写的程序将要实现何样的功能。
2.确定编写程序时采用何样的方法。
3.创建程序。
4.运行程序,检查结果。
3、4步骤为一个程序的开发周期。
具体过程与JAVA类似,先使用编辑器创建包含源代码的文件。
然后对源代码进行编译,以创建被成为可执行文件或库文件的中间文件。
最后是运行程序,检测能否按照预期的规划情况运行。
---------------
第一行C#源代码:
System.Console.WriteLine("Hello,Justin!
"); ----输出“Hello,Justin”
编辑器,即开发工具。
推荐使用:
VS2005
保存源代码文件可以任意设置扩展名,习惯通用“.cs”
-------------------
第一个C#程序
classHello
{
staticvoidMain()
{
System.Console.WriteLine("Hello,Justin!
");
}
}
可以使用任意一种文本工具写,另存为hello.cs。
经测试,要编译的文件名是不区分大小写的。
可能使用不同的编译器,操作步骤会有区别。
在这里我是使用的vs2005,在命令行下进行编译。
cschello.cs
会生成一个hello.exe的可执行文件,运行结果是在屏幕上输出Hello,Justin!
结合学习其他语言的过程,重点看了下报错过程。
能将错误具体报出,实在是一件很爽的事情。
用ASP的时候,要不停的response.writeend()痛苦,实在是痛苦。
同样C#也无法判断逻辑上的错误。
OK,第一天顺利结束,并没有碰到无法理解的问题。
友情提示:
学习一门编程一定要动手,动手,动手。
===================================================================
第二天
通过第一天的学习,建立C#编程语言的概念,开发周期:
写代码--编译--运行,开始第二天。
-----------------------------------------------
大纲:
c#应用程序的组成部分,C#的语句和表达式,面向对象编程技术的特征,封装/继承/多态/重用,在程序中显示基本信息.
从一个C#程序开始分析
//app.cs-Asamplec#application
//Don`tworryaboutunderstanding everthinginthislisting.You`lllearnallaboutitlater!
//--------------------------------------
usingSystem;
classsample
{
publicstaticvoidMain()
{
//Declarevariables
intradius=4;
constdoublePI=3.1459;
doublearea;
//Docalculation
area=PI*radius*radius*radius;
Console.WriteLine("Radius={0},PI={1}",radius,PI);
Console.WriteLine("Theareais{0}",area);
}
}
编译后,运行结果:
Radius=4,PI=3.14159
Theareais201.3376
--------------------------------------------
首先是注释,分单行注释,多行注释,文档注释三种.
//单行注释内容
/*
多行注释内容
*/
///文档注释内容
文档注释可以用"csc/doc:
***.xml***.cs"来提取成XML文件.(个人认为在编写应用程序的时候用处比较大,平时使用单行注释就足够了)
接下来才是C#语言的组成部分:
a.空白.空白总是被编译器忽略,包括空格,换行符等.(好的编程习惯:
intradius=4;)但是在双引中间的空白不会被忽略.
b.c#关键字.关键字都含有特殊含义,需要被保留.不能将其挪作他用.
c.字面值.这个概念比较抽象,后面有详细介绍.
d.标识符.同样比较抽象的概念.暂切不理.
---------------------------------------------------
分析上面的程序:
1~4行:
注释
5,7,13,17,21,23行:
空白
6行:
using语句(第六天讲详细介绍)
8行:
类声明(第六天详细介绍)
9,11,26,27行:
标点字符
10行:
Main()
c#将从Main()函数开始执行代码,通过调用函数名来运行.(第七天详细介绍)
14,15,16行:
声明
20行:
赋值语句
24,25行:
调用函数(初学者最难理解的地方)
对比以前了解过的JAVA程序,二者是多么的相似.程序结构几乎是一模一样.
----------------------------------------------------
面向对象的概念
(听很多人说面向对象程序,但是一直没有明确这个概念.这里要理解的概念性东西含多.当然,个人觉得还是以应用为主,概念不理解,可以以后再搞懂.但是弄清楚概念,对于理解一些书面的东西还是有好处的)
一种语言,它使用对象,具有封装,多态,继承,重用的特点.
封装:
封装指的就是创建"包".用户不用去关心包内的程序是如何执行的,只需要了解如何与包交互.得到所需结果即可.
多态:
多态是呈现多种形态的功能.(看完介绍还是不太理解,11天有详细介绍)
继承:
(不理解,还是不理解.懵懵懂懂,一知半解的,跳过)
重用:
面向对象最重要的特点.
对象和类的概念跳过,第六天详细介绍.
两个将信息打印到屏幕上的例程:
System.Console.Write()
System.Console.WriteLine()
区别是,WriteLine()在新的一行中输出信息,而Write()在本行输出.
之前程序中用到System.Console.WriteLine("ceshi{0},{1}",ceshi0,ceshi1).类似数组的概念.
-------------------------------------
第二天有很多概念性的问题,需要参照后面的详细介绍进一步理解
从第三天开始,不再是枯燥的概念性东东,将开始介绍数据类型,运算符,语句等编写程序所需要的基本组成.
=============================================================================================================
第三天使用变量存储信息
变量是计算机内存中被命名的数据存储单元.
变量可以存储任意类型的数据.
变量的命名规则:
可以包含数字,字母和下划线;第一个字符只能是字母或下划线(不推荐使用下划线,会降低程序的可读性.);区分大小写;不能将C#的关键字用作变量名.
编程习惯:
变量名使用小写字母,常量使用大写字母.多个单词组成的变量,单词间用下划线隔开.如hello_justin
骆驼表示法(Camelnotation):
将多个单词组成的变量名,每个单词的第一个字母大写.如HelloJustin
变量使用前,需要声明,否则编译器将生成错误信息.
声明格式:
intcount,number,start;
声明多个变量,在一行或多行中生成,对性能无影响,单多行声明可增加程序的可读性;
下面通过一个程序来了解给变量赋值:
//var_values.cs-Alistingtoassignandprintthevalueofavariable
//---------------------------------------------------------------------
usingSystem;
classvar_values
{
publicstaticvoidMain()
{
//declaremy_variable
intmy_variable;
//assignavaluetomy_variable
my_variable=5;
Console.WriteLine("/nmy_variablecontainsthevalue{0}",my_variable);
//assignanewvaluetomy_vairable
my_variable=1010;
Console.WriteLine("/nmy_variablecontainsthevalue{0}",my_variable);
}
}
初始化变量:
intmy_variable=1;
声明int型变量my_variable的同时给他赋值为1.这种声明同时初始化的操作,是一个好习惯.
注:
未初始化的变量,在c和c++中是可以被编译的,但c#是不允许使用未初始化变量.
--------------------------------------------------------------------------
变量类型中的数值型:
4类(在这里涉及到各类型数值占用字节数,忘记是学什么的时候接触到了,N久以前的事情.不理解的,需要专门学习下.占用字节数的多少,直接决定取值范围.)
a.整数
细分:
整数(int和uint,4字节),短整数(short和ushort,2字节),长整数(long和ulong,8字节),Byte(byte和sbyte,1字节),字符(char,2字节).
int是带符号的整数,可存储-2147483648()到2147483647之间的整数;uint是不带符号的整数,可存储0~4294967295之间的整数
使用short和unshort,可以在存储整数的同时节省内存.short取值范围,-32768~32767;ushort取值范围,0~65535.
使用long和ulong,可存储非常大的整数.long取值范围,-9223372036854775808~9223372036854775807;ulong取值范围,0~18446744073709551615.
使用byte和sbyte,可存储仅占1字节整数.byte取值范围,-128~127;sbyte取值范围0~255.
使用char可以存储字符.这里引入了Unicode的标准.Unicode将字符和符号都使用一个整数表示.所以可以将char视为整型.
给char赋值需要使用:
charvariable='hello'
b.浮点数
细分:
float,4字节和double,8字节.
个人认为除特殊用途外,一般很少用到小数.
c.decimal
存储高精度小数,8字节,个人认为使用的几率更小.
d.布尔型
bool.取值只有true(真)或false(假),通常被设置为0或1.
--------------------------------------------------------------
常量:
声明常量后,可以防止在使用过程中值被更改
声明规则:
constPI=3.14159;
习惯将常量全部大写.
--------------------------------------------------------------
引用类型:
(又一个比较难理解的概念)
按引用存储和按值存储.
基本数据类型,int/char等都是按值存储.
类,字符串,接口,数组,代表(delegate)都是使用按引用存储.
不是很理解按引用存储,个人理解应该是类似数组存储一组数字的概念.后面会有详细介绍.
程序清单3.4中介绍了各个数据类型所需内存空间.
第三天顺利结束,接下来是运算符和语句了.
========================================================================================
第四天 使用运算符
运算符分类:
基本的赋值运算符;数学/算术运算符;关系运算符;条件运算符;其他运算符(类型,大小等).
运算符结构分三类:
单目,双目和三目.
分别使用单个变量(-1),两个变量(1+1)和三个变量(真正的三目c#运算符只有条件运算符).
介绍运算符之前提到标点符号的概念:
a.分号:
主要用于结束一条c#语句,也可以用于控制流程的c#语句.
b.逗号:
用于将多个命令放在同一行中,最多用于声明同一类型的多个变量.
如:
intvar1,var2,var3;
c.圆括号:
用于函数中,使用圆括号来强制改变执行顺序(后面将提到).
d.花括号:
用于代码片段分组.如用花括号来括住类.(花括号自身和括号之间的代码被成为代码块.)
-----------------------------------------------------------------------------
赋值运算符:
=
用于赋值,如:
x=142;将运算符右边的值赋值给左边的变量.
x=y=1;这样的写法是成立的.先将1赋值给y,再将y的值1赋值给x.
1+x=y;是不成立的.也不能将常量或字面值放在赋值运算符的左边.
数学运算符:
加+,减-,乘*,除/,求余%,递增++,递减--.
与数学运算相同.需要注意的是复合运算符+=,-=,*=,/=,%=
对应规则为,x=x+y对应x+=y
x=x-y对应x-=y
x=x*y对应x*=y
x=x/y对应x/=y
x=x%y对应x%=y
使用复合运算符可以使程序更简洁.但程序不容易被理解,可以采用加注释的方法弥补.
递增,递减为单目运算符.运算结果为将变量+1,-1
对应规则为,++x对应x=x+1
--x对应x=x-1
注意先递增和后递增的概念.如x=++y,先将y递增,然后给x赋值.x=y++,则是先给x赋值,然后将y递增.递减同理.
先递增,将递增运算优先执行.后递增,将递增运算符最后执行.
不理解的,可以参考程序清单4.3来理解.
关系运算符:
大于>,小于<,等于==,不等于!
=,大于等于>=,小于等于<=
最终得到的结果只有真和假两个结果
if语句:
-----------大名鼎鼎的if语句啊,使用的太多了.
分析程序来理解if语句.
//iftest.cs-Theifstatement
//----------------------------
classiftest
{
staticvoidMain()
{
intval1=1;
intval2=2;
System.Console.Write("Gettingreadytodotheif....");
if(val1==val2)
{
System.Console.Write("Ifconditionwastrue");
}
System.Console.WriteLine("Donewiththeifstatement");
}
}
与其他语言中if语句用法没什么区别,需要注意的是,C#中使用{}来划分代码段.
条件逻辑运算符号:
条件"和"&&,条件"或"||.
&&执行逻辑"与"
||执行逻辑"或"
这里需要参考与非或的逻辑运算.熟悉与非或的运算后,只需要掌握在C#中的逻辑运算符.
逻辑按位运算符:
不在本书存储范围内,可以选择性理解.
类运算符:
在后面介绍类和接口时涉及.运算符typeof,is,as
sizeof运算符:
用于确定值的长度.因sizeof运算直接操纵内存,尽量避免使用.
条件运算符:
condition?
IfTrueStatement:
IfFalseStatement;
condition是条件,结果为true执行iftrueStatement,结果为flase执行iffalsestatement.
运用条件运算符,可以使代码更简洁,但是代码的可读性会降低.一般用来替代if语句.
--------------------------------------------------------------------------------
运算符的优先级:
表4.3详细介绍了运算符的优先级.与其他编程语言相比,运算符优先级并没有什么区别.
可以通过括号来改变运算的优先级,括号内的运算,总是优先执行.
---------------------------------------------------------------------------------
转换数据类型:
将一种类型变量的值赋给另一种类型的变量,需要先进行类型转换.对不同类型的数值进行运算,也需要先转换类型.
分显式和隐式两种.
隐式转换自动进行,显式转换需要强制转换.格式为:
ToVariable-(datatype)FromVariable;
表4.4介绍了需要进行显式转换的类型.
隐士转换与运算数提升(operanolpromotion)相关.
当两个变量执行基本的算术预算时,执行前会被转换成相同的数据类型.
提升次序:
byte,int,uint,long,ulong,float,double,decimal.
按位运算符,顾名思义,按每个变量的存储单元进行运算.实质上是翻译成ASCII码后再运算.很少用到
第四天O了.数据类型与运算,一门编程语言中基础的基础.
================================================================================================
第五天控制语句
按照改变流程的方法可分为选择语句和循环语句.
----------------------------------------------------
选择语句,可以根据条件的结果执行特定的代码段.if和switch都是选择语句.
if...else语句的格式
if条件
{
结果1
}
else
{
结果2
}
当条件为真时,执行结果1,为假时执行结果2.
switch...case...break语句的格式
switch(条件值)
{
case值1:
结果1;
break;
case值2:
结果2;
break;
default:
上述条件均不满足时输出的结果;
break;
}
每条case语句都以break为结束.如果条件值与值1,2都不相等,则执行default语句.
当多个条件使用同一种解决方案时.可以使用下面的方案.
switch(条件值)
{
case值1:
case值2:
结果A;
break;
case值3:
case值4:
结果B;
break
default:
结果C;
break;
}
当条件值等于值1或值2时,输出结果A,条件值等于值3或值4时,输出结果值B.
省略break;时,case语句之间不能存在代码.
使用goto命令跳到某个case语句或default语句,格式:
switch(条件值)
{
case值1:
gotocase值3;
break;
case值2:
gotocase值3;
break;
case值3:
结果A;
break;
default:
结果B;
break;
}
sbyte,byte,short,ushot,int,uint,long,ulong,char或文本字符串都可用在switch语句中.
如表达式的数据类型不是上述类型,则需要该数据类型有唯一的一种隐式转换方式可以转换为上述类型.
如果没有隐式转换方式,或转换方式不只一种,就会发生编译错误.
需要注意的是,if和switch的条件句后面,没有;来结束.
-----------------------------------------------------------------------
夜深了,洗洗睡了,明天将笔记发到blog上.
可能是今天涉及到的东西与java有很大的相似性,而且没有概念上的疑问,动手写的很少.
这是个不好的习惯,一定要戒除.动手是学习任何一门编程语言的正道.
明天继续循环语句.
-----------------------------------------------------------------------
循环语句:
while,do,for,foreach
while语句,当条件为真时,不断重复执行代码块.
while(condition)
statement(s)
通过一个程序理解while语句
//average.cs-Usingthewhilestatement.
//Printtheaverageof10randomnumbersthatarefrom1to10.
//-------------------------------------------------------------
classaverage
{
publicstaticvoidMain()
{
intttl=0;//varia