C#概念

 

抽象类(abstract)只能被继承,不能被实例化;抽象类的用途是提供多个派生类可共享的基类的公共定义。

Final修饰的类不能被继承;

父类中的抽象方法必须被重写,抽象类中不一定要有抽象方法,但抽象方法必须要在抽象类中;

抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。

如果将虚方法声明为抽象方法,则它对于从抽象类继承的所有类而言仍然是虚的。继承抽象方法的类无法访问该方法的原始实现。

密封类(sealed):密封类不能用作基类。因此,它也不能是抽象类。密封类主要用于防止派生。由于密封类从不用作基类,所以有些运行时优化可以使对密封类成员的调用略快。

密封成员的申明:public sealed override void DoWork() { }

 

OOP编程的多态表现:

重载(overload):重载是在一个类中用相同的名称但是不同的参数类型(或返回值类型)创建一个以上的函数、实例构造函数或属性。

重写/覆盖(override)在派生类从基类中继承了某些属性或方法,如果继承的属性或方法需要在派生类中有不同的行为,该方法或属性可以“重写”。

改写(overwrite)

 

类型分为值类型(value)和引用类型(regerence type)

C#中定义的值类型包括:原类型(SbyteByteShortUshortIntUintLongUlongCharFloatDoubleBoolDecimal)、枚举(enum)、结构(struct)

值类型是继承自ValueType类,值类型的变量直接存储数据,实例是被分配在栈中的,并且永远不可能为空。通过下面的例子可以看出,两个整形变量是分别存储数据的,如下面的代码,无论哪个变化都不会影响另一个。

[C#]
Int16 iA = 123;
Int16 iB = iA;
iA = 321;
Console.WriteLine("A = {0}", iA);//321
Console.WriteLine("B = {0}", iB);//123

 

引用类型包括:类、数组、接口、委托、字符串等

引用类型是继承自Object,引用类型变量存储的是数据内存的地址,而实例是被分配在可以进行垃圾回收的堆中的。一份数据可以被多个变量引用,使用这种变量类型能够起到节省内存资源的作用,同时也会由于一个引用变量的修改而导致其他引用的变更。引用类型的变量是可以为空的,那表示它不指向任何对象。如下面的代码,可以看出clsAclsB实际上都指向内存中同一个对象的实例。

 
[C#]
using System;
class Class1
{
         static void Main(string[] args)
         {
                 clsRef clsA = new clsRef();
                 clsA.iValue = 123;
                 clsRef clsB = clsA;
                 clsB.iValue = 321;
                 Console.WriteLine("A = {0}", clsA.iValue);
                 Console.WriteLine("B = {0}", clsB.iValue);
                 Console.Read();
         }
}
 
class clsRef
{
         public Int16 iValue;
}

 

 

装箱(boxing):把值类型转换为引用类型;

拆箱(unboxing):把引用类型转换为值类型;

虚方法(virtual):不能将 virtual 修饰符与以下修饰符一起使用:static (虚拟成员本需要在派生类中重写),abstract(虚拟成员本身与抽象成员一样使用),override(理由同static一样)虚拟成员与接口成员一样使用,但是功能不一样,虚拟成员在父类中可以有自己的实现。

 

 

posted @ 2007-01-20 10:58  charles  阅读(181)  评论(0)    收藏  举报