.net 基础的一些零碎知识点

来源:互联网 发布:泡泡堂官方下载 mac 编辑:程序博客网 时间:2024/05/21 17:43

托管代码:通常在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类型输出,(int32o(是把引用类型转化为值类型int32)然后在转化为string类型输出《===string temperature= v+”,”+(Int32)o;Console.WriteLine(temp);

}

此段代码中包进行了三次装箱操作

静态变量:带有static修饰符声明的变量称为静态变量。

实例变量:不带有static修饰符声明的变量称为实例变量。

局部变量:是指在一个独立的程序块,一个for语句,switch语句或者using语句中声明变量。它只在该范围中有效。局部变量不会自动被初始化,所以也就没有默认值。

只要变量的作用域是程序的不同部分就不会有问题,也不会产生模糊但要注意:同名的局部变量不能在同一作用域内声明两次。

变量的初始化方法:变量是类或结构中的字段,如果未进行显示的初始化,默认状态下当创建这些变量是,对其进行初始化,如0;方法的局部变量必须在代码中侠士初始化,之后才能在语句中使用他们的值。

常量特性:常量必须在声明时初始化。指定了其值后就不能再修改了;常量的值必须能在编译时用于计算,因此不能从一个变量中提取的值类初始化常量;常量总是静态的,但不能包含修饰符static

结构初始化

结构的new操作符与类的工作方式不同,new操作符并不分配堆中的内存,而是调用相应的构造函数,根据传送给它的参数,初始化所有字段。也可以通过给字段赋值的方式实现初始化。

 

原创粉丝点击