一、抽象类与接口
1、类似处:他们都包含可以由派生类继承的成员。都不能实例化,但可以声明他们的变量。如果这样做,
就可以使用多态性把继承这两中类型的对象指定给他们的变量。接着通过这些变量来使用这些类型的成员,但
不能直接访问派生对象的其它成员。
2、区别:派生类只能继承一个基类,即只能直接继承一个抽象类,但可以通过一个继承链来包含多个抽
象类。相反,类可以使用任意多个接口。
按照定义,接口成员是公共的(因为它们倾向于外部使用),但抽象类的成员可以是私有的、受保护
的、内部的或受保护的内部成员。
此外,接口不能包含字段、构造函数、静态成员或常量 。
3、这说明这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要的特性,例
如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。
举例说明:假如有一个对象系列表现火车,基类Train包含火车的核心定义,比如轮胎和引擎规格。但这
个类是抽象的,我们不能开着这样的火车 。所以,我们给它添加一些特性(真实的发动机、好的轮胎),得到了“蒸汽”和“汽油”火车两个派生类 Train_A 和 Train_B 。
接着,我们来考虑,汽车做好了,我们可以用来做什么?对,搭乘客,装货物,而这两种方法我们可以
放在接口 Interface 中,这样他们就有了共同的任务。
二、结构类型
1、结构和类非常相似,但结构是值类型的,类是引用类型的,这意味着什么?举例说明:
... {
class Myclass
...{
publlic int val ;
}
struct myStruct
...{
public int val;
}
class program
...{
static void Main(String[] args)
...{
Myclass A = new Myclass() ;
Myclass B = A;
A.val=10;
B.val=20;
myStruct C = new myStruct() ;
myStruct D = C ;
C.val=30;
D.val=40;
Console.WriteLine("A.val={0}", A.val) ;
Console.WriteLine("B.val={0}", B.val) ;
Console.WriteLine("C.val={0}", C.val) ;
Console.WriteLine("D.val={0}", D.val) ;
Console.ReadKey() ;
}
}
运行后,得到的结果是 :
A.val =20, B.val=20 , C.val=30, D.val=40 。