c# 基础

const和readly都是不能修改值得变量,它们的区别是:

  • const是在编译时确定的,readonly是在计算执行时确定的。所以const只能在声明时赋值,而readonly可以在构造函数中赋值。

  • const默认就是静态的,而readonly想设为静态需要声明。

  • const只能用null的引用类型(除string)的常量字段字段进行初始化,readonly可以为任何类型。

访问修饰符

  public, private, protected, internal, protected intenal

  public:公有访问,不受任何限制。

  private:私有访问,子类,实例都不能访问。

  protected:保护访问,只限于本类和子类访问,实例不能访问。

  internal:内部访问,只限于项目内访问。

  protected internal:内部保护访问,只限于本项目或是子类访问。

 

封箱和拆箱

  封箱和拆箱:c#中的封箱和拆箱类似java中的打包和拆包,但java中应用的范围没有c#这么大,而且java中的可打包的数据类型是固定的。c#中由于有结构的存在,所以可封箱的数据是无固定类型的。

  封箱:将值类型转换为System.Object类型,或者转换为值类型所实现的接口类型。c#中值类型有:整型,浮点型,char,bool,以及结构类型。由于结构可以实现接口,所以结构类型的数据可以被封箱,然后由接口类型引用来指向。

  拆箱:将封箱所得到的数据通过强制转换成原来的值类型数据。

  值类型存储在栈中,引用类型存储在堆中。

  1) 装箱操作
  装箱(box)就是将值类型转换为引用类型的过程。而相反的过程就叫拆箱(unbox)。
  装箱时发生了什么?
  (1)在堆上分配内存。因为值类型最终有一个对象代表,所有堆上分配的内存量必须是值类型的大小加上容纳此对象及其内部结构(比如虚拟方法表)所需的内存量。
  (2)值类型的值被复制到新近分配的内存中
  (3)新近分配的对象地址被放到堆栈上,现在它指向一个引用类型。

  2)拆箱操作
  注:被装过箱的对象才能被拆箱。
  在装箱的时候,并不需要显示类型转换.但在拆箱时需要类型转换.这是因为在拆箱时对象可以被转换为任意类型.
  注意:装箱操作可以隐式进行,但拆箱操作必须显示。
  首先,检查这个对象实例,看它是否为给定值类型的装箱值。
  然后,把这个实例的值拷贝给值类型的变量。
  要尽量减少装箱与拆箱操作

Ref和out

  ref:值类型在传递希望成为引用的时候,ref就是告诉传递的时候不是拷贝,而是同一个副本。
  out:不需要给变量赋初值,使用out也没必要在外面赋初值,是在内部赋“初值”,out传递值是理解成没有初始化的。

 

posted on 2015-01-21 22:23  荆小轲  阅读(202)  评论(0编辑  收藏  举报

导航