C#高级编程笔记(一)

C#与.net

C#本身是一种语言;.NET Framework是一个平台即一个环境。

只是C#编译器专门用于.net,所以C#代码总是使用.net运行。

.net Framework 的核心是运行执行环境(公共语言运行库CLR、.NET运行库).

在CLR下运行的代码称为托管代码(mannaged code)

CLR对于源代码(code)的执行过程:

1..net将code编译为IL  2. CLR将IL编译为平台专用代码

IL:Microsoft中间语言(使用数字代码)

IL中间语言

特点:

1.面向对象和使用接口

2.值类型和引用类型的显著差异

3.强数据类型化

4.使用异常来处理错误

5.使用特性(attribute)

关键词:CTS:通用类型系统 CLS:公共语言规范 

垃圾回收:一般两种方式:手动释放;对象维护计数;

安全性:代码访问安全性;

应用程序域(application domain):分离组件的一种方式。(有跨应用程序域边界对象访问的方式)

进程:用来孤立代码的唯一方式。

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

类型推断(type inference): 使用var关键字。编译器根据变量的初始化值“推断”变量的类型

变量作用域:

字段和局部变量的作用域冲突:区分名称相同、作用域相同的两个标识符:将类级别声明的变量标识为字段,将方法中声明的变量看做局部变量,这种情况下变量可以重名(但是在方法中的变量会隐藏类级别的变量),引用类级别的变量可以使用object.fieldname(需区分静态访问Object.fieldname与非静态访问this.fieldname)

常量(conts)

常量总是静态的(不必在声明中使用static);必须在声明时初始化,而且指定值后不能再改写;必须能在编译时用于计算,即不能使用变量值来初始化常量(只读字段可以这么做);

预定义数据类型

值类型与引用类型

值类型直接存储其值,引用类型存储对值的引用(值对象在托管堆上的地址);值类型存储在堆栈中,引用类型存储在托管堆上

一般将自己的类型定义为值类型可以把它声明为结构。

C#有15个预定义类型,其中13个值类型,两个引用类型(string 和 object)

C#认可的基本类型没有内置于C#语言中,而是内置于.net framework中。eg:C#中的int 实际上是.net结构中的system.Int32;

意义:在语法上可以把所有的基本数据类型看成是支持某些方法的类。基本类型在概念上用.net结构表示。

eg:int i; string str = i.ToString();//这句中将int类型转换为string类型没有性能损失。

预定义值类型:

整型:在强调类型安全时,C#认为byte类型与char类型不同,必须显示转换;byte无符号,sbyte有符号;

预定义引用类型:

object类型:C#中的最终父类,所有内置类型以及用户定义的类型都从它派生。

目的:(1).使用object引用绑定任何子类型的对象。eg:装箱、反射;

   (2).实现一般用途的基本方法,Equals(),GetHashCode(),GetType(),ToStrng().

string类型:string类型与引用类型的区别。字符串不可改变,修改其中一个字符串,就会创建一个全新的string对象,而另一个不会改变

eg:

1 string str1 = "string1”;
2 string str2 = str1;
3 console.writeline("str1 is {0};str2 is {1}",str1,str2);
4 str1 = "new string1";//改变str1 的值,但此时str2并未改变
5 console.writeline("str1 is {0};str2 is {1}",str1,str2); 

  原因:运算符重载,这里重载了“=”(赋值)运算符。

转义字符、@的使用。

 

2016年1月7日23:09:36

 

 

posted @ 2016-01-07 23:10  Zima  阅读(9895)  评论(0编辑  收藏  举报