C# 基础(2)

       打开一个解决方案,以.sin后缀名,.csproj是项目文件的后缀名。 

Console.WriteLine("这是我的第二个项目!");你想显示的内容

Console.ReadKey(); 

   当程序执行到Console.ReadKey(); 时,程序会停到这里,等待用户从键盘上键入一个键,用户键入这个键后,程序才继续执行。

 

在C#中,每一句都必须以分号结束。

 

WriteLineWrite的区别是有没有换行。

 

设置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、非整数即小数(doubledecimal))

 

               

 

数据类型    

 

 

 

              非数值(charstring

 

 

 

Double 小数精度1516

 

Char   字符型 只能存储一个字符,并且存储的这个字符用单引号引起来.’A’

 

String  字符串类型,就是把0个或1个或多个字符连接起来,要求用双引号引起来。”string”

 

Decimal 精度2829位,主要用于财务上。

 

 

 

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#中数据类型包括两种,一种是值类型,一种是引用类型,值类型是直接存储值,而引用类型存储的是值得引用。

 

引用类型的变量又称为对象,可存储对实际数据的引用。Classinterfacedelegate都可以用于声明引用类型。

 

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);//ac引用的不是同一个字符串实例

 

            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());哈希运算一个数学方程式,

 

            //它可用文本(如电子邮件信息)来生成称为信息摘要的代码。

 

            //著名的哈希函数如:MD4MD5SHS。 用于数字鉴别的哈希函数必须有特定的属性,

 

            //使它在密码使用方面有足够的安全性。

 

             o = 123;

 

             i = (int)o;//拆箱

 

             Console.WriteLine(i);

 

             Console.WriteLine(i.GetType ());

 

             Console.ReadKey();

 

Sbyte 八位有符号整数 

 

Byte 八位无符号整数

 

 

 

??操作符

 

            int ? x = null;

 

            //y=x,如果x=nully=-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 ;

 

在运算时,++ageage加一后的新值参与运算,故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所带的语句块

 

如果条件为False,则跳过if所带的语句块1,执行else带的语句块

 

上面两个语句块,根据条件结果为truefalse,总有一个语句块被执行。

 

 

 

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

 

  Break

 

  Case : 

 

  语句块2

 

  Break

 

  Case : 

 

  语句块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此循环,如果i0开始,则循环条件为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早晨

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/sly-tongtong/p/3688216.html