博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

c#基础知识

Posted on 2011-08-27 12:48  枫之一刀  阅读(199)  评论(0编辑  收藏  举报

.Net Framework 的核心是其运行库的环境,称为公共语言运行库(CLR)或.Net运行库。通常将CLR的控制下运行的代码称为托管代码(managed code).

在CLR执行编写好的源代码之前,需要编译他们。分为两个阶段:
1:把源代码编译为Microsoft中间语言(IL)。
2:CLR把IL编译为平台专用的代码。

Microsoft中间语言与Java字节代码共享一种理念:它们都是低级语言,语法很简单(使用数字代码,而不是文本代码),可以非常快速的转换为内部机器码。这种设计有很重要的有点:平台无关性,提高性能和语言的互操作性。目前只适用于Windows,MONO项目使他可以用于其他平台。

IL总是即时编译(称为JIT 编译),JIT并不是把整个应用程序一次编译完,而是指编译它调用的那部分代码。代码编译一次后,得到内部可执行代码就存储起来,直到推出该应用程序为止,这样下次运行这部分代码时,就不需要重新编译了。

值类型,变量直接保存其数据,而对于引用类型,变量仅包存地址。对应的数据可以在该地址中找到。

通用类型系统(CTS)

公共语言规范(Common Langugage Specificatio,CLS)和通用类型系统(CTS)一起确保语言的互操作性。

Windows平台使用两种技术来释放进程向系统动态请求的内存:
1:完全以手工方式使应用程序代码完成这些工作。
2:让对象维护引用计数。

.Net 运行库采用的方法是垃圾收集器。方法是所有动态请求的内存都分配到堆上。当.Net检测到给定进程的托管堆已满,需要清理时,就调用垃圾收集器。垃圾收集器处理目前代码中的所有变量,检查对存储在托管堆上的对象引用,确定哪些对象可以从代码中访问–即那些对象有引用。没有引用的对象就不能再从代码中访问,因而被删除。

程序集(assembly)是包含编译好的、面向.Net Framework 的代码的逻辑单元。

c# 主方法入口 Main 必须大写首字母。

所有C#代码必须包含在一个类中。

c#中方法定义如下所示:

[modifiers]    return_type MethodName([parameters])

{

//Method body

}

修饰符 static 表示方法不能在类的势力上执行,因此不必先实例化类再调用。

变量的初始化是C#强调安全性的一个例子,简单说,c#编译器要用某个初始值对变量进行初始化,之后才能在操作中引用该变量。

C#有两个方法可确保变量在使用前进行了初始化:
1:变量是类或结构中的字段,如果没有显示初始化,创建这些变量时,其值就默认是0
2:方法的局部变量必须在代码中显示初始化,之后才能在语句中使用他们的值。编译器会检测。

类型推断使用var关键字。

变脸的作用域:
1:在类的某个作用域内,其字段(也称为成员变量)也在该作用域内。
2:局部变量存在于表示声明该变量的块语句或方法结束的封闭花括号之前的作用域内。
3:在For、While或类似的语句声明的局部变量存在于该循环体内。

字段和局部变量的作用域冲突:

如果要访问一个实例字段(该字段属于类的一个特定实例),就需要使用this关键字。

常量 const

常量必须在声明时初始化。常量总是静态的。

常量用以与理解的清楚名称替代了不明确的数字或字符串。

常量使程序更易于修改。

常量更容易避免程序出现错误。

值类型和引用类型

从概念上看,值类型直接存储其值,而引用类型存储对值的引用。

存储在内存的不同:值类型存储在堆栈上,引用类型存储在托管堆上。