打开一个解决方案,以.sin后缀名,.csproj是项目文件的后缀名。
Console.WriteLine("这是我的第二个项目!");你想显示的内容 Console.ReadKey();
当程序执行到Console.ReadKey(); 时,程序会停到这里,等待用户从键盘上键入一个键,用户键入这个键后,程序才继续执行。
在C#中,每一句都必须以分号结束。
WriteLine与Write的区别是有没有换行。
设置VS环境中的字体与行号 :工具->选项
在C#中注释符:对我们写的程序进行解释,注释是给人看的。有三种:
① 单行注释,以//开始到本行结束
② 多行注释,以/*开始,以*/结束
③ 文档注释,用于类和方法进行注释,在类和方法签名连续输入3个 /
常用键:HOME END PageUP PageDown DELT
下面一对指令,可以折叠一堆代码
#region 和#endregion
.NET是一种多语言的开发平台,开发.NET可以用多达十几种语言进行开始。
.NET框架平台包括 语言 VC++、C#、VB.NET等
.NET FrameWork 类库(FCL)
公共语言运行库(CLR)
操作系统:
C#通过C#编译器,编译成MSIL(微软中间语言)->CLR(公共语言运行库),代码被执行。
变量:
计算机使用内存(RAM ,Random access momory)来储存数据,内存用于存储计算机正在运行的数据,断电后后面的数据丢失。保存数据之后就将数据从内存转到硬盘中。
运行中,计算机给内存编址,变量代表着一块内存空间,我们可以通过变量名向内存存/取数据,有变量就不需要我们记忆复杂的内存地址。
去宾馆登记入住
要在计算机中存一个数据1000,需要2句话。
申请一块内存空间,考虑类型
int number;
number = 1000; 其中=赋值运算符,将数值1000放入内存空间。
数值(整数int、非整数即小数(double、decimal))
数据类型
非数值(char、string)
Double 小数精度15到16位
Char 字符型 只能存储一个字符,并且存储的这个字符用单引号引起来.’A’
String 字符串类型,就是把0个或1个或多个字符连接起来,要求用双引号引起来。”string”
Decimal 精度28到29位,主要用于财务上。
在C#开发环境中,直接写一个有小数点得数字,这个数字就是double类型。在此小数后面加一个m/M,这就是告诉编译器,此小数是decimal类型。
变量声明的方法,有3种:
① 先声明,后赋值;
② 定义变量时,直接赋值;
③ 可以一次声明多个同类型的变量,多个变量名称之间用逗号隔开,最后以分号结束。
注:变量要先声明,后赋值,最后使用(取值或调用这个变量或写这个变量)。
变量的命名规则:
1、 必须以“字母”_ @符号开头(不能以数字开头)
2、 后面可以跟任意的“字母”、数字和下划线。
注意:
1、 变量名不予系统中的关键字重复
2、 在C#中,大小写敏感
3、 同一个变量名不允许重复定义
定义的变量名要有意义。
C#中变量命名编码规范,有两种:
Camel命名法:首个单词的首字母小写,其余单词的首字母大写。在Main()方法中的定义变量采用Camel命名法。
Pascal命名法:每个单词的首字母均大写。
如果使用大英语单词的缩写,全部要用大写。
赋值运算符(=)和赋值表达式
优先级最低的
a= a+1
先把a取出来,相加再赋值
注:变量可以重复赋值,一旦给一个变量附了新值,那么变量中的老值就不存在了。
一般情况下,变量只能定义一次,但可以多次赋值,再次赋值是,会把变量中的值给覆盖掉了。
“+”在C#中有两种意义:
1)是数学中的加法;两边参与加法运算的是数值类型
2)是连接的意思,如果两边参与的是“+”运算的数据,有一个是字符串类型。
整理于2012-02-27
C#中数据类型包括两种,一种是值类型,一种是引用类型,值类型是直接存储值,而引用类型存储的是值得引用。
引用类型的变量又称为对象,可存储对实际数据的引用。Class、interface、delegate都可以用于声明引用类型。
C#中有两个内置的引用类型,object类型和string 类型,
1)object类型
object类型在.NET中是Object的别名,在C#中,所有的类型,都可以直接或间接从Object继承。可以将任何类型的值赋给object变量。
class ObjectClass
{
public int i = 60;
}
class Program
{
static void Main(string[] args)
{
object a = 1;
Console.WriteLine(a);
Console.WriteLine(a.GetType ());//取得当前的类型
Console.WriteLine(a.ToString ());
Console.WriteLine();
a = new ObjectClass();//重新实例化变量a
ObjectClass classRef;
classRef = (ObjectClass)a;//引用调用
Console.WriteLine(classRef.i);
Console.Read();
}
}
string 类型表示Unicode字符的字符串,它是.NET中的String别名,字符串是不可改变的,字符串对象一旦被创建,其内容就不能更改。
string a = "hello";
string c = "h";
c = c + "ello";
Console.WriteLine(a==c);
Console.WriteLine((object )a==(object )c);//a和c引用的不是同一个字符串实例
int i= Console.Read();
Console.WriteLine(i);
// Console.WriteLine(Console.ReadKey() );
Console.WriteLine();
Console.ReadKey();
装箱与拆箱
装箱是将值类型转换为引用类型object,这使得值类型可以存储在垃圾回收堆中,而拆箱是从对象中提取值类型。
相对于简单的赋值而言,装箱和拆箱过程需要进行大量的计算,对值类型进行装箱时,必须分配并构造一个全新的对象,而拆箱过程的强制转换也需要进行大量的计算,因此装箱和拆箱会对程序的执行性能有影响。
int i = 99;
object o = (object )i;//装箱
Console.WriteLine(o);
Console.WriteLine(o.GetType());
// Console.WriteLine (o.GetHashCode());哈希运算一个数学方程式,
//它可用文本(如电子邮件信息)来生成称为信息摘要的代码。
//著名的哈希函数如:MD4,MD5,SHS。 用于数字鉴别的哈希函数必须有特定的属性,
//使它在密码使用方面有足够的安全性。
o = 123;
i = (int)o;//拆箱
Console.WriteLine(i);
Console.WriteLine(i.GetType ());
Console.ReadKey();
Sbyte 八位有符号整数
Byte 八位无符号整数
??操作符
int ? x = null;
//y=x,如果x=null,y=-1
int y = x ??-1;
Console.WriteLine("y是{0}",y);
New运算符
New 运算符用于创建一个新的类型实例,它有以下3种形式:
1)对象创建表达式,用于创建一个类类型或值类型的实例。
2)数组创建表达式,用于创建一个数组类型的实例。
3)代表创建表达式,用于创建一个代表类型的实例。
Typeof运算符
Typeof运算符用于获得系统原型对象的类型,即type对象。Type类型包含关于值类型和引用类型的信息,Typeof运算符可以在C#语言中的各种位置使用,以找出关于引用类型和值类型的信息。
Type myType = typeof (int );
Console.WriteLine(myType );
占位符
在Console.WriteLine("")中,第一个变量或字符串可以使用占位符。
占位符由{数字}组成,数字由0开始编号
第1个占位符:{0}
第2个占位符:{1}
第3个占位符:{2}
......
0取第一个变量,1取第二个变量,占位符可以重复使用。
Console .WriteLine ("我叫{0},今年岁了,我的工资是{2}元",name,age,salary );
占位符
Console .WriteLine()有多个参数时,输出都是第一个参数中的内容,从第二个参数开始时,都是用来替换第一个参数中的占位符的值,所以从第二个参数开始,要不要输出,就要看第一个参数有没有相关的占位符。(?)
字符串类型
Console.ReadLine( );
用于让用户从键盘上输入一句话,当程序执行到上面的一句话,就会暂停,然后等待用户从键盘上输入一句话,按回车程序将继续执行。如果想得到用户输入的内容,就需要定义一个string类型的变量,写在上面一句话的前面,接收用户输入的内容。接收用户输入的内容,必须定义一个字符串来接收。
string input = Console.ReadLine( );
字符串的转义
转义字符:什么时候用转义字符?
当我们需要字符串中输入一些特殊字符时,比如半角引号、换行、退格。
转义字符是一个字符,它由一个和一个字母来组成,并且有特殊意义的一个字符。常用转义字符有:
换行
baskspace 退格
tab键,由多个空格组成的字符,具有行与行之间的对齐功能。
\ 表示一个扛
"表示一个"
在字符前面加一个@有两种意义:
⑴字符串中如果有,则不再理解为转义符;
(2)使字符串可以换行
如果在字符串前面加了@符号,在字符串中用两个双引号代表一个引号。
算数运算符及算数表达式
算数运算符:+ - * / %(取余或取模)
算数表达式:由算数运算符连接起来的式子。
C#中,有5个运算符,+ - * / %它们均是二元运算符,要求参与的两个操作数的类型必须相同,并且经过运算的结果也与操作的类型相同。
优先级:先乘除,后加减,有括号先运算括号内的,先算里层的括号,再算外层的括号,相同级别从左至右运算,小括号可以无限制使用,注意的是,一定要成对出现。
类型自动转换规则:
参与运算(算数运算和赋值运算)的操作数和结果类型必须一致,当不一致时,满足下面条件时,系统会自动完成类型转换。
1)两种类型兼容;比如int类型和double 类型
2)目标类型大于源类型;比如double >int ,小的转向大的,且数据不丢失。
3)对于表达式
如果一个操作数为double类型,则整个表达式将提升为double类型。
在自动转换过程中,是不丢失精度的,经常遇到的是,参与运算的两个操作数,一个是int类型,一个是double类型,那么int 类型将自动转换为double类型。
如果精度丢失,则自动转换不会进行。
强制类型转换:
语法:
(数据类型名)待转换的值
强制类型转换,数据一定要相互兼容。
字符串说法通过强制类型转换成数字类型,因为强制转换要求待转换的类型和目标类型必须都为数字。
string age = Console.ReadLine();
int age1= Convert.ToInt32 (age);
Convert 不再是内存级别的转换,而是考虑数据含义的转换。Convert是一个加工、改造的过程。
一切类型都可以转换为String 类型。
Try-catch
Try
{
有可能出现错误的代码在在这里
}
Catch
{
出错后的处理
}
如果try中的代码没有出错,则程序正常运行try中的内容,不会执行catch中的内容。
如果try中的代码一旦出现错误,程序立即停止,跳入catch部分进行执行。
自加自减
一元表达式
++ 有前加和后加
-- 有前减和后减
Int age = 18
Int sum = age++ - 10
上面代码在进行运算时,age++取age原值进行运算,所以sum= 8;
就相当于
Int age = 18
Int sum = age - 10
Age = age +1
Int age = 18;
Int sum = ++age -10 ;
在运算时,++age取age加一后的新值参与运算,故sum= 9;
就相当于
Int age = 18;
Age = age + 1;
Int sum = age -10;
总之,不管是++age,还是age++,age的值都进行了加一运算。
在c#中,一元运算符的优先级比二元运算符的优先级高。
复合运算符
+= age +=3 就等价于age = age +3,理解为在age的原值上直接加3
-=
*=
/=
%=
C#中,能改变变量中的值有:
=、++、--、+=、-=、*=、/=、%=
关系运算符(比较运算)
> < == != >= <=
在C#中,6个关系运算符,用于比较两个事物之间的关系。
关系表达式的运算结果为bool类型,BOOL类型只有两个值,一个是True一个是Flase,如果关系表达式成立,则这个表达式的值为True,否则为False。
逻辑运算符(&& || !)
1)逻辑与运算符(&&)
表达式1 |
表达式2 |
逻辑与结果 |
True |
True |
True |
Flase |
True |
Flase |
True |
Flase |
Flase |
Flase |
Flase |
Flase |
逻辑与(&&)连接的两个表达式要能求解成BOOL类型,一般情况下都是关系表达式,整个逻辑与运算结果也是BOOL类型
BOOL isRight = 表达式1 &&表达式2
先进行关系运算,再进行与运算。
2)逻辑或运算(||)
只要有一个为True,其运算结果就为True
3)逻辑非(!)(取反) 这是一个一元运算
用法:
!(布尔类型的表达式即关系表达式)
作用,真变假,假变真
&&逻辑与 第一个条件为false时,第2个表达式不执行
||逻辑或 第一个条件为true时,第2个表达式不执行
优先级:
If 结构
If(条件) 条件时关系表达式或逻辑表达式
{
语句1;
}
执行过程:
首先判断条件的结果,如果条件为true,则执行语句1,如果条件为False,则跳过语句1,执行后面的语句。
注意:
1)if后面括号中的条件要能计算为一个bool类型;
2)默认情况下,if语句只能带一句话,即和if语句有关的语句只有语句1。
If - else 结构
语法
If(条件)
{
语句块1;
}
Else
{
语句块2;
}
如果大括号去掉,则只带一句话。
执行过程:
如果条件为true,则执行语句块1,并且跳过else所带的语句块2 ;
如果条件为False,则跳过if所带的语句块1,执行else带的语句块2 。
上面两个语句块,根据条件结果为true或false,总有一个语句块被执行。
If - elseif -else
语法
If(条件1)
{
语句块1;
}
elseIf(条件2)
{
语句块2;
}
elseIf(条件3)
{
语句块3;
}
。。。。。。
Else
{
语句块;
}
在if-elseif结构中只有当上一条件不成立时,才会进入下一个elseif 语句,并进行后面的条件判断,一旦elseif后面的条件为true,则执行elseif所带的语句块,执行完成后,程序跳出if-elseif结构,如果所有的if都不成立,如果有else,则执行else后面所带的语句,否则什么都不执行。
Else 永远和最近的if语句配对。
Ctrl+K+F 自动排版功能。
Switch-case语句
语法:
Switch(表达式)其结果是一个值
{
Case 值1 :
语句块1:
Break;
Case 值2 :
语句块2:
Break;
Case 值3 :
语句块3:
Break;
。。。。。。
Default :
语句块3;
Break;
}
执行过程:
首先计算表达式,然后根据计算的结果,去匹配case后面的值,如果有匹配项,则执行匹配项后面的语句,知道该语句后面的break语句,跳出switch-case语句,如果与所有的case后面的值都不匹配,如果有default,则执行default,则执行default后面的语句,如果没有default语句,则跳出switch-case,什么都不执行。
注意:
直接搜索匹配项,与default位置无关,只有和匹配项有关,只有当没有匹配项的时候,才执行default后面的语句。
但多种类型输出的结果相同时,可以合写。
If - elseif -else和 Switch-case语句
相同点:
都可以实现多分支结构:
不同点:
Switch-case语句一般情况下只能用于等值比较
If - elseif -else语句可以处理范围
目前,我们学习的程序结构有3种:
顺序结构
分支结构
循环结构
While循环的语法
While(循环条件)结果是bool类型,是true或是false
{
循环体;及要循环执行的N条语句
}
执行过程:
1)先判断循环条件,如果条件为True,则转向2),如果条件为false,则转向3);
2)执行循环体,循环体执行结束后,转向1);
3)跳出循环,循环结束。
注意:
在循环体中一定要有改变循环条件中的每个变量的值得语句,使循环条件终有一天为False。
N此循环,如果i从0开始,则循环条件为i<n
特点:是先判断,后执行。
Do -while 循环
语法:
Do
{
循环体;
}
While(条件);
执行过程:
1)先执行循环体,执行完循环体,转向2);
2)判断条件是否成立,如果条件为True,转向1),如果条件为False,则转向3)
3)跳出循环。
加入循环条件开始就不成立,对于while循环,一次都不会执行循环体,而对于do-while循环,会执行一次循环体。
Try-catch语句
检测异常
Try
{
有可能出现异常的代码
}
Catch
{
出现异常后的处理
}
如果try语句真的代码没有出现异常,则不会执行Catch中的代码,如果try中的代码出现异常,则程序立即跳到catch中。
如果语句有异常,则不会执行异常语句下面的语句。
程序调试
程序错误一般有两种错误:语法错误和逻辑错误。
3种方法:
1)单步运行
2)观察变量
3)设置断面
F10 F11 单步运行
For 循环
用于已知循环次数:
语法:
For(表达式1;表达式2;表达式3)
{
循环体;
}
执行过程:
1)先计算表达式1,转向2);
2)判断表达式2(即为循环条件),如果表达式2的值为True,转向3),如果表达式2的值为False,转向5);
3)执行循环体,转向4);
4)执行表达式3,转向2);
5)跳出循环,循环结束。
一般情况下,表达式1用于循环变量和对循环变量附初值;
表达式2为循环条件;
表达式3用于改变循环变量的值。
跳转语句
Break语句,用于循环中,退出当前循环。Break一般与if语句配合使用
While
{
........
Break;跳出循环
随后的语句不执行
}
注:
1)用于Switch-case结构中,用于跳出switch。
2)用于循环中,跳出循环,终止循环。
用于循环中,跳出的是break所在的循环。
标志位 flag 定义为bool类型
Continue 语句
While( )
{
Continue;继续进行下一次循环。
}
Continue:
用于循环中,程序一旦执行到continue语句,立即结束本次循环,就是不再执行循环体中下面的语句,直接进行下一次循环。
对于do-while/while循环,直接进行下一次循环条件的判断,如果成立,进入下一次循环。
对于for循环,先执行表达式3,再判断条件是否成立。
三元表达式
表达式1?表达式2:表达式3
执行过程:
首先计算表达式1,应该是一个能够计算成BOOL类型的值,如果BOOL类型的表达式为True,则表达式2的值为整个表达式的值,如果表达式1的值为False,则表达式3的值作为整个表达式的值。
于2012- 03-02早晨