在进行深入了解时,先做一道题吧,检测一下自己的基本功如何
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields() { }
}
class B : A
{
int x = 1;
int y;
public B()
{
y = -1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}
static void Main(string[] args)
{
B b = new B();
b.PrintFields();
Console.ReadLine();
}
这样输出结果是什么呢?点击ViewCode查看答案
x=1,y=0 x=1,y=-1 为什么呢? B b = new B()时,先执行A的构造函数,输出结果时,还没有执行B的构造函数,此时y=0 b.PrintFields(); 这个时候已经执行过B的构造函数,此时y=-1
抽象类与接口的对比已经有很多人写了,我就不详细介绍了,只对我目前的了解程序做一个总结
抽象类是一类事物的抽象,比如,宝马、奔驰、奥迪都是车(抽象类)。
接口定义一种行为:比如上面的三类车都会跑(接口),跑是每个车的行为,但是跑的具体方法有所不同。
这个比喻这说明抽象类与接口的表现形式不同,如果想深入了解请参考以下文章
http://kb.cnblogs.com/page/42159/
http://www.cnblogs.com/lovemyth/archive/2008/09/08/828909.html
这两篇文章足以能说明抽象类与接口的区别了。