抽象方法:当类中的方法在声明的时候加上 abstract关键字的时候,他就被我们称为抽象方法(洋名字叫abstract method ,其实偷偷告诉你哈,我最近学了好多英文单词,虽然还是常常读错,但是已经有很大进步了,估计要不了多久就可以在那里大声朗读李白曾经写过的一首英文诗歌了),但是有个很重要的提醒,只有在抽象类和接口中才可以使用抽象方法.
例如 : 下面这个
public abstract class Thc123_Com
{
public abstract voidGoTo();
}
public class Thc123_Net : Thc123_Com
{
publicoverride void GoTo()
{
//实现上面抽象方法
}
}
=========================================================================================
在讲接口之前呢我又想跟大家吹下牛,大家知道我们的组装计算机,即便是那些品牌机他实际上也是来自很多不同的厂商然后组装起来的,那么这写硬件之间就有一个必然的联系,那就是他们之间一定要有规范的接口,可是就拿我们的主板来说吧,这个CPU,他既可以是赛阳的,也可以是奔腾的,更可以是速龙,闪龙,当然我跟特别非常十分希望再加上一个咱们中国的CPU品牌,这些CPU肯定采用了一些不同的运算方式啊,所以说我们这个接口就还要学会一点(我们常常劝老人的话,他只要在孝顺你,你就别关他那么多的家务事),说得太好了,我们的接口还要做的事就是不管对方是怎么实现的,反正你插到这里面((*&^#@*&^%$%^$$#$)你就要实现具体的功能,至于你怎么实现就不管那么多了.
接口:他呢其实也是一种特殊的抽象类,用interface 关键字标记,他的定义没有 class关键字,他可以包含方法和属性和事件,但是方法也只能是虚拟方法,任何派生于该接口的类就必须提供执行的代码.任何接口成员前面都不能加修饰符.
接口可用的修饰符有 new ,public ,protected , internal , private,但是同一声明中修饰符只能有一个,new关键字只能出现在镶套接口中,表示复写继承来的同名成员.
接口和类一样,可以被继承和发展,但不同的是,类继承不仅说明继承也会实现继承,但是接口继承只是说明继承,通俗的说,派生类可以继承基类的方法实现,而派生接口只是继承父接口的方法说明,却没有继承父接口的实现.
语法:
interface Ibook
{
string GetBookName();
}
接口相关知识:
1.声明在接口中的方法,不可以包含方法的内容区块,简单来说就是不能有大括号存在,例如下面
public interface Ibook
{
string GetBookName()
{ }
}
2. 实现接口的类就要这样写
public class Employee:Ibook , IUser
{
}
3 . 实现接口需要注意的一些东东
(1).实现一个接口就必须完成接口里的所有方法.(就好象谁家有几个女儿,有漂亮的有对不起观众的,我要去娶那个漂亮的,然后人家开口了,小伙子,你要娶我女儿可以,但是你必须把几个女儿全部娶了,否则我会让你后悔一辈子.)
(2).在实现的类中又有几点必须遵循的(我倒,都三重编号了,看来我写的书后期编辑是件很棘手的事)
·存取权限必须相同 ;
·返回值类型必须相同
·方法的名称必须相同
·参数必须相同
(3) . 接口内的方法不能用 virtual关键字申明,更不要设置存取权限.
下面我们继续来看下个例题
另外还有一种呢就是以明确的方式实现接口
简单来说就是方法前面必须加上接口的名称.这个解释起来没有看起来明确,来吧,看这里(怎么听这话有点怪怪的,难道是我思想不健康,按理说我算是生在阳光下,长在花丛中(不过18岁以后我就基本上是成长在一群花虫 中了),没理由思想会这么XX啊.)
下面针对抽象类和接口做一个详细的对比
抽象类( abstract method) | 接口 ( interface) |
可以包含实现区块 | 不能包含实现区块 |
可以包含抽象方法 | 不能包含抽象方法 |
可以包含非public成员 | 不可以包含非public成员 |
能继承其他的类,包含非抽象类 | 能继承其他接口 |
可以控制版本 | 无法控制版本 |
不能被实例化 | 不能被实例化 |
virtual:这个关键字表示当前方法、属性、索引器或事件的抽象实现或虚实现可被任何派生自这个类的扩充类进行复写.
override:表示当前方法已经改写了基类的同名同参数的方法、属性、索引器或事件的抽象实现或虚实现.