托管代码:通常在CLR的控制下运行的代码称为托管代码。它不是运行(直接)在windows系统之上的而是通过提交到from中然后反馈的到windows系统。有垃圾回收(内存)作用。CLR管理者应用程序,其方式是管理内存,处理安全性以及允许进行跨语言调试等。
托管代码的执行过程:选择编译器-----将代码编译为Microsoft中间语言(MSIL)-----将MSIL编译为本机代码------运行代码。
命名空间是.net避免类名冲突的一种方式。
引用类型与值类型:引用类型总是从托管堆上分配(C#的new操作符返回的就是对象位于托管堆中的内存地址——该内存地址指向对象占用的数据位);值类型实例通常分配在线程的堆栈上,表示值类型实例的变量不包含指向实例的指针——变量本身即包含了实例所有的字段。
值类型:变量直接保存其数据;(byte char int decimal enum Boolean)
引用类型:变量仅保存地址,对应的数据可以在该地址中找到。(class interface string)
Eg:
Using System;
Class Class1
{
Public int Value = 0;
}
Class Test
{
Static void Main()
{
Int val1 = 0;
Int val2 =val1;
Val2=123;//值类型
Class1 ref1 =new Class1();//实例
Class1 ref2 = ref1;
Ref2.Value = 123;//引用类型
Console.WriteLine (“Values :{0},{1}”,val1,val2);
Console.WriteLine(“Refs: {0},{1}”,ref1.Value,ref2.Value);
Console.ReadLIne();
}
}
运行结果:Values: 0,123
Refs:123,123
李氏替换原则:凡是基类实例出现的地方,我们都可以使用派生类的实例进行替换
Eg:
Class QstStudent :student
QstStudent qststu = new QstStudent();
Student stu = new Student();//基类实例óStudent stu = qststu;//派生类实例(等价)
类型转换:从小往大可显可隐
从大往小必须可显
Eg:
显示类型转换
int x = 5;
Double = (double)x;
隐式类型转换
int x =5;
Double y =x;
装箱与拆箱:装箱是将值类型转换为引用类型。值类型装箱时,从托管堆中为新生成的引用类型对象分配内存,值类型实例的值被复制到此空间,对此存储区的引用被置于栈上。拆箱是装箱的反过程。
Eg1:
Int x =5;//value type
Object o = x;//Boxed
Console.WriteLine(“The answer is :{0}”,x);//boxed
Int y = (int) o;//unbox
Eg2:
Public static void Main(0
{
Int32 v = 5;
Object o = v;//一次boxing
v = 123;
Console.WriteLine(v+”.”+(int32) o);//此处有两次装箱过程,首先“v”把int类型的v转化为string类型输出,(int32)o(是把引用类型转化为值类型int32)然后在转化为string类型输出《===》string temperature= v+”,”+(Int32)o;Console.WriteLine(temp);
}
此段代码中包进行了三次装箱操作
静态变量:带有static修饰符声明的变量称为静态变量。
实例变量:不带有static修饰符声明的变量称为实例变量。
局部变量:是指在一个独立的程序块,一个for语句,switch语句或者using语句中声明变量。它只在该范围中有效。局部变量不会自动被初始化,所以也就没有默认值。
只要变量的作用域是程序的不同部分就不会有问题,也不会产生模糊但要注意:同名的局部变量不能在同一作用域内声明两次。
变量的初始化方法:变量是类或结构中的字段,如果未进行显示的初始化,默认状态下当创建这些变量是,对其进行初始化,如0;方法的局部变量必须在代码中侠士初始化,之后才能在语句中使用他们的值。
常量特性:常量必须在声明时初始化。指定了其值后就不能再修改了;常量的值必须能在编译时用于计算,因此不能从一个变量中提取的值类初始化常量;常量总是静态的,但不能包含修饰符static。
结构初始化:
结构的new操作符与类的工作方式不同,new操作符并不分配堆中的内存,而是调用相应的构造函数,根据传送给它的参数,初始化所有字段。也可以通过给字段赋值的方式实现初始化。