小二哥's blog

----zhangzs8896(小二)

导航

.Net中几个容易混淆的概念

Posted on 2006-04-26 23:04  小二哥  阅读(425)  评论(0编辑  收藏  举报

 1.值类型与引用类型
    .Net语言类型分为两类:值类型和引用类型.
    值类型的变量直接包含其数据,而引用类型的变量存储对其数据的引用.
    对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象.
    对于值类型,每一个变量都具有自己的数据副本,对一个变量操作不可能影响另一个变量.
    大部分固有的基本类型(如int, char)是值类型,structs 也是值类型。引用类型包括类、接口、数组和字 
    符串。基本的概念非常简单,那就是一个值类型的实例代表了实际的数据(存在栈中),而一个引用类
     型的实例代表指向数据的指针或者引用(存在堆中)。

2.堆与堆栈
   GC的全称是garbage collection,中文名称垃圾回收,是.net中对内存管理的一种功能。垃圾回收器跟踪
  并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可
  用内存不能满足内存请求时,
GC会自动进行。
  内存有堆栈和堆的概念。堆栈遵循后进先出的原则.
    
3.传值与传址的区别
   方法的参数传递有四种:传值,传址,输出参数,数组参数.
   传值参数无需额外的修饰符,传址参数需要修饰符ref,输出参数需要修饰符out,数组参数需要修饰符params.传值参数在方法调用过程中如果改变了参数的值,那么传入方法的参数在方法调用完成以后并不因此而改变,而是保留原来传入时的值。传址参数恰恰相反,如果方法调用过程改变了参数的值,那么传入方法的参数在调用完成以后也随之改变。实际上从名称上我们可以清楚地看出两者的含义--传值参数传递的是调用参数的一份拷贝,而传址参数传递的是调用参数的内存地址,该参数在方法内外指向的是同一个存储位置.

传值与传址的区别

4.委托与事件      
   MSDN中的定义:
       
A delegate declaration defines a reference type that can be used to encapsulate a methord with a specific signature.
     A delegate instance encapsulate  a static or an instance method. Delegates are rughly similar to function pointers in c++;
     howerver,delegate are type-safe and secure.

    C#编程指南中的定义:
     委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方
    法的使用可以象其他任何方法一样,具有参数和返回值。
  
    委托是函数的封装,它代表一“类”函数。他们都符合一定的签名:具有相同的参数列表和返回值。同
   时委托也可以看成是对函数的抽象,是函数的“类”。此时,委托的实例将代表一个具体的函数。
    
    如何委托:

委托的声明与使用

5. 重载与覆写
    重载(overload):
    同一类中定义的方法可能具有不同的版本,此时需要使用 重载
    方法名必须相同.;参数类型必须不相同;返回值类型不做要求(可以相同,也可以不同)

重载的示例代码:

   覆写(override)
   子类中为了满足自己特殊的需求,重复定义父类中的方法.
   注意:只有虚方法抽象方法才能被覆写.
   要求方法名,参数列表,返回值类型都相同.
覆写的示例代码

6.虚方法(关键字: virtual)与抽象方法(关键字: abstract)
   虚方法可以有自己的实现体,它与普通区别仅在于虚方法可以被覆写,而普通方法不可以.
   抽象方法必须被派生类覆写,可以看成是没有实现体的虚方法.
   注意:如果类中具有抽象方法,那么这个类必须被定义为抽象类.
 
111