首页 > Python基础教程 >
-
C#教程之知识小点整理(1)
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。