当前位置导航:炫浪网>>网络学院>>编程开发>>Visual C#教程

C#抽象类与接口的区别

注意!我在这里所描述的抽象类和接口是基于C#的。

一、抽象类
抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。

抽象类实例
 1    public abstract class A
 2    {
 3        private int? num = null;
 4
 5        public int? Num
 6        {
 7            get { return num; }
 8            set { num = value; }
 9        }
10
11        public virtual int? getNum()
12        {
13            return num;
14        }
15
16        public void setNum(int? n)
17        {
18            this.num = n;
19        }
20
21        public abstract void F();
22    }
23
24    public abstract class B:A
25    {
26        //public override void F()
27        //{
28        //    throw new Exception("The method or operation is not implemented.");
29        //}
30
31        public abstract void E();
32    }
33
34    public class C : B
35    {
36        private C()
37        {
38        }
39
40        public override void E()
41        {
42            throw new Exception("The method or operation is not implemented.");
43        }
44
45        public override void F()
46        {
47            C c = new C();
48            throw new Exception("The method or operation is not implemented.");
49        }
50    }


二、接口
接口是引用类型的,类似于类,更和抽象类有所相似,以至于很多人对抽象类和接口的区别比较模糊。和抽象类的相似之处有三点:
1、不能实例化;
2、包含未实现的方法声明;
3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

接口有如下特性:
接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。
一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。

接口实例
 1    public delegate void Del();
 2    public interface ITest
 3    {
 4        //int ?a = null;
 5
 6        int A
 7        {
 8            get;
 9        }
10
11        void Test();
12        event Del OnDel;
13        int this[int index]
14        {
15            get;
16            set;
17        }
18    }


注意!还有另外一种类不能被实例化:
所有构造函数都被标记为private,这种类也是不能被实例化的,严格的说是不能在类外被实例化,

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接