知识小点整理(1)

1. C#中的virtual override

class A
{
      public A() {}
      public void print1() { Console.WriteLine("print1"); }       
      public virtual void print2() { Console.WriteLine("print2"); }
}   

class AA: A
{
      public AA() {}
      public void print1() { Console.WriteLine("print1a"); }
      public override void print2() { Console.WriteLine("print2a"); }
}  
 
class Program
{
    static void Main(string[] args)
    {
        A test = new AA();
        test.print1();
        test.print2();
    } 
}  

输出是:

print1
print2a

virtual修饰的方法为虚方法,暗示其子类最好有自己的实现 

override修饰的方法为重写方法,表示覆盖了基类原有方法的实现

 

2. 再梳理指针与引用

(1) 指针:指针是一个变量,这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。

(2) 可以有const指针,但是没有const引用;

(3) 指针可以有多级,但是引用只能是一级(int **p合法 而 int &&a是不合法的)

(4)指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;

(5)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。

(6)"sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身的大小;

(7)指针和引用的自增(++)运算意义不一样;

(感谢http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html)

 

3. C#中的装箱拆箱

(1) C#语言中的所有类型都是由基类System.Object继承过来的,包括最常用的基础类型:int, byte, short,bool等等,就是说所有的事物都是对象。

(2) .NET将类型分成值类型和引用类型,C#中定义的值类型包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚举(enum)、结构(struct),引用类型包括:类、数组、接口、委托、字符串等。

(3) 值类型就是在栈中分配内存,在申明的同时就初始化,以确保数据不为NULL;
     引用类型是在堆中分配内存,初始化为null,引用型是需要GARBAGE COLLECTION来回收内存的。

(4) 装箱就是隐式的将一个值类型转换为引用类型对象;拆箱就是将一个引用类型对象(已装箱)转换成任意值类型。

 

1 int i=0;
2 System.Object obj=i;
3 int j=(int)obj;

这段代码,前两句装箱,第三句拆箱。

 

1 int i=0;
2 System.Object obj=i;
3 Console.WriteLine(i+","+(int)obj);

这段代码,前两句一次装箱,i转string一次装箱,(int)obj一次拆箱,拆完的int值再装箱成string。

(感谢http://www.cnblogs.com/xiaoshi/archive/2008/05/28/1208902.html)

posted on 2017-02-16 16:34  pandawuwyj  阅读(358)  评论(0编辑  收藏  举报

导航