C#概念
抽象类(abstract)只能被继承,不能被实例化;抽象类的用途是提供多个派生类可共享的基类的公共定义。
Final修饰的类不能被继承;
父类中的抽象方法必须被重写,抽象类中不一定要有抽象方法,但抽象方法必须要在抽象类中;
抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。
如果将虚方法声明为抽象方法,则它对于从抽象类继承的所有类而言仍然是虚的。继承抽象方法的类无法访问该方法的原始实现。
密封类(sealed):密封类不能用作基类。因此,它也不能是抽象类。密封类主要用于防止派生。由于密封类从不用作基类,所以有些运行时优化可以使对密封类成员的调用略快。
密封成员的申明:public sealed override void DoWork() { }
OOP编程的多态表现:
重载(overload):重载是在一个类中用相同的名称但是不同的参数类型(或返回值类型)创建一个以上的函数、实例构造函数或属性。
重写/覆盖(override)在派生类从基类中继承了某些属性或方法,如果继承的属性或方法需要在派生类中有不同的行为,该方法或属性可以“重写”。
改写(overwrite) 。
类型分为值类型(value)和引用类型(regerence type)。
C#中定义的值类型包括:原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚举(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,引用类型变量存储的是数据内存的地址,而实例是被分配在可以进行垃圾回收的堆中的。一份数据可以被多个变量引用,使用这种变量类型能够起到节省内存资源的作用,同时也会由于一个引用变量的修改而导致其他引用的变更。引用类型的变量是可以为空的,那表示它不指向任何对象。如下面的代码,可以看出clsA和clsB实际上都指向内存中同一个对象的实例。
[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一样)虚拟成员与接口成员一样使用,但是功能不一样,虚拟成员在父类中可以有自己的实现。
浙公网安备 33010602011771号