一 .NET Framework
从msdn(http://msdn.microsoft.com/zh-cn/library/zw4w595w.aspx)上可以知道
1 .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,顾名思义,表示不检查)。如下图所示:
三 枚举和结构
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语句只能对数组进行只读操作,如果进行写操作,则会报错。如上例中这会出现错误,见图:
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是只出不进
方法定义:
方法调用:
结果:
正确的定义是这样的:
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下)调用程序时,添加的指定信息。
例:
代码中:
结果:
这里 hello world 就是以指定的信息,程序调用时就将其赋值给args
----完---
PS.部分内容不是特别详细,有时间以后再补充