C#学习总结之一基础语法篇

一 .NET Framework 

 

从msdn(http://msdn.microsoft.com/zh-cn/library/zw4w595w.aspx)上可以知道 

 

.NET Framework 提供了一个编程环境; (VS只是一个开发工具)

2 .NET Framework 提供了一个代码执行环境。 

 

.NET Framework 具有两个主要组件:CLR(Custom language Runtime,公共语言运行时)和 .NET Framework 类库。

 

CLR是 .NET Framework 的基础。和Java中的JVM比较类似。

 

.NET中,程序语言的编译分为两个步骤,以C#为例

1.C#编译器将C#代码编译成Microsoft 中间语言(IL,即Intermediate Language)

2.JIT(Just-In-Time,我现在的理解JIT是CLR的一部分)编译器将IL编译成本机专用的代码

 

这样子有两个好处,一个是语言多样性,各种语言比如C#,VB等语言都可以通过各自的语言编译器编译成IL;第二个好处平台无关性,IL代码是独立于操作系统,CPU和机器的,因此选择相应的JIT编译器,就可以运行在不同的机器上,例如IL可以运行在带有JIT的Windows XP上,也可以运行在带有JIT的Linux上(这个貌似现在基本很难,尽管有各种开源的相关我不清楚的东东的存在) 

 

二 C#基本语法

 

因为基本语法到处都有,写出来会很长,我又很懒,又很没必要,所以我挑了一些自己容易忽略经常犯错的细节来写

 

1.C#中的变量在使用前必须赋值,没有默认值这一说,否则会报错

  也就是说这样子用是不合法的:

                   int  i;  Console.WriteLine("{0}", i);

 

2. @字符。@字符的作用是逐字指定,也就是可以这样用

                   string str = @"D:/Program Files/Java/jdk1.6.0_10";

    本来正常情况下是需要转义符"/"的,上述的正常应该写成这样:

                   string str = "D://Program Files//Java//jdk1.6.0_10";

     而加了"@"之后就不需要转义符了,所赋值的就是两个引号之间的内容

 

3.命名空间可以嵌套,而且一个C#文件中可以有两个以上的命名空间

    namespace NameSpace1

    {

            namespae NameSpace2

            {

             }

     }

    及

     namespace NameSpace1

    {

             ......

     }

     namespace NameSpace2

    {

             ......

     }

 

4.C#中,switch语句中,执行完一个case后紧接着执行另一个case是不合法的(C++可以),必须有break;

 

5.简单类型的隐式装换:bool和string没有隐式装换,数值类型之间有一些隐式转换。另外,char型和ushort型之间由于都是存储0~65535之间的范围,可以相互进行隐式转换。

 

6.简单类型的显示转换有两种方法,例如将int型转换为ushort型
例:int i=7;
     ushort u;
     方法一:u = (ushort)i;
     方法二:u = Convert.ToUInt16(i);
这里可能会发生溢出,从而导致值发生变化。例如当i>65535时,为防止这种情况发生,可以使用checked的关键字(与之相对应的就是unchecked,顾名思义,表示不检查)。如下图所示:

使用cheked关键字

 

 

三 枚举和结构

 

 1.枚举。枚举是一种类型声明,不可以放在函数中,否则会报错,这是因为在运行期间,定义代码并不是像执行应用程序中的代码那样一行一行地执行

例,将string转换为枚举型

(枚举的定义:enum Week : int { Mon = 1, Tue, Wed, Thu, Fri, Sat, Sun };

 

2.结构。结构和枚举一样,也要在代码的主体外部定义。 

结构在定义的时候就直接分配了内存,不需要new,直接给其成员赋值即可。

(结构的定义 

           struct Work

        {

            public Week w;

            public bool stateWork;

        }

  

 

四.数组和字符串

 

1.一维数组的定义(四种方法,如下例所示)

  

注意:foreach语句只能对数组进行只读操作,如果进行写操作,则会报错。如上例中这会出现错误,见图:

 

 foreach中赋值出现错误

 

2.多维数组

声明和使用与一维的基本类似

例(三维):

 

 

 3.数组的数组。用于存储变长数组,每个元素是一个数组。数组的数组声明和定义和普通的数组不一样,主要有两种方法。

 

方法一:

  

 

方法二:

foreach的使用也不尽相同,需多重循环:  

  

 

 

4.字符串的处理

  • ToCharArray();将字符串分解为char型的数组
  • ToLower(); 将字符串全部转换为小写
  • ToUpper();将字符串全部转换为大写
  • Trim();把字符串前面和后面的空格删除,也可以指定char数组(不能从中间删除)
  • TrimStart(),TrimEnd();把字符串前面或后面的空格删除,也可以指定char数组
  • PadLeft(),PadRight();添加字符串长度,达到指定的参数长度。添加的部分由函数的参数字符给出。分别左右。
  • Split();将字符串按照参数分解为字符串数组

例:

  

结果如下:

字符串处理结果

 

五 方法 (method)

 

方法的返回值和参数共同决定了方法的签名。

方法的参数可以是简单类型,也可以是复杂类型。数组,对象等等都可以。

 

1.参数数组。C#中允许定义一个特殊的参数,该参数使得调用此方法时,可以不必传递数组,这样就使得传递的参数数目是可变的。该参数使用关键字params修饰,并且必须作为方法的最后一个参数而放在方法的最后。

例:

主方法Main中的代码

方法的具体实现代码

 

2.引用参数和值参数。一般而言,我们见到的都是值参数(更准确说是传递简单类型时,传递对象时当然传递的是引用了)。传递的值参数在调用的代码中的发生的改变,不会影响到原方法。引用参数则会。引用参数会用到关键字ref,在方法调用和方法定义时都要用到

例: 

方法定义:

方法调用:

 

 

3.输出参数。输出参数的用法和ref相似,关键字是out,区别是把未赋值的变量用ref传递是非法的,out则是合法的,而且赋值后的变量利用out传递后会被清空,相当于没赋值使用out时,方法定义中必须给out参数赋初值,否则会报错

简洁的说,rel是有进有出,out是只出不进

方法定义:

 

方法调用:

  

结果:  

 使out关键字,未赋初值产生的错误

正确的定义是这样的:

Main方法调用后,结果是60。

 

4.Main()方法。Main主要有四种签名:

  • static void Main(string[] args)
  • static void Main()
  • static int Main(string[] args)
  • static int Main()

其中返回值为int型的可以表示程序如何终止,返回值为0表示正常结束。参数args主要用于命令行(比如dos下)调用程序时,添加的指定信息。

例:

代码中:

结果:

 终端参数调用Main()主方法

这里 hello world 就是以指定的信息,程序调用时就将其赋值给args

 

 

----完---

PS.部分内容不是特别详细,有时间以后再补充 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值