C#的接口基础教程之七 覆盖虚接口

有时候我们需要表达一种抽象的东西,它是一些东西的概括,但我们又不能真正的看到它成为一个实体在我们眼前出现,为此面向对象的编程语言便有了抽象类的概念。C#作为一个面向对象的语言,必然也会引入抽象类这一概念。接口和抽象类使您可以创建组件交互的定义。通过接口,可以指定组件必须实现的方法,但不实际指定如何实现方法。抽象类使您可以创建行为的定义,同时提供用于继承类的一些公共实现。对于在组件中实现多态行为,接口和抽象类都是很有用的工具。

一个抽象类必须为类的基本类列表中列出的接口的所有成员提供实现程序。但是,一个抽象类被允许把接口方法映射到抽象方法中。例如
 
interface IMethods {
 void F();
 void G();
}
abstract class C: IMethods
{
 public abstract void F();
 public abstract void G();
}

这里, IMethods 的实现函数把F和G映射到抽象方法中,它们必须在从C派生的非抽象类中被覆盖。

注意显式接口成员实现函数不能是抽象的,但是显式接口成员实现函数当然可以调用抽象方法。例如
  
interface IMethods
{
 void F();
 void G();
}
abstract class C: IMethods
{
 void IMethods.F() { FF(); }
 void IMethods.G() { GG(); }
 protected abstract void FF();
 protected abstract void GG();
}

这里,从C派生的非抽象类要覆盖FF 和 GG, 因此提供了IMethods的实际实现程序。

时间: 2024-11-08 21:07:18

C#的接口基础教程之七 覆盖虚接口的相关文章

C#的接口基础教程之二 定义接口

定义接口 从技术上讲,接口是一组包含了函数型方法的数据结构.通过这组数据结构,客户代码可以调用组件对象的功能. 定义接口的一般形式为: [attributes] [modifiers] interface identifier [:base-list] {interface-body}[;] 说明: 1.attributes(可选):附加的定义性信息. 2.modifiers(可选): 允许使用的修饰符有 new 和四个访问修饰符.分别是:new.public.protected.interna

C#的接口基础教程之六 接口转换

C#中不仅支持.Net 平台,而且支持COM平台.为了支持 COM和.Net,C# 包含一种称为属性的独特语言特性.一个属性实际上就是一个 C# 类,它通过修饰源代码来提供元信息.属性使 C# 能够支持特定的技术,如 COM 和 .Net,而不会干扰语言规范本身.C# 提供将COM接口转换为 C#接口的属性类.另一些属性类将 COM类转换为C# 类.执行这些转换不需要任何 IDL 或类工厂. 现在部署的任何COM 组件都可以在接口转换中使用.通常情况下,所需的调整是完全自动进行的. 特别是,可以

C#的接口基础教程之四 访问接口

对接口成员的访问 对接口方法的调用和采用索引指示器访问的规则与类中的情况也是相同的.如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员.但由于接口支持多继承,在多继承中,如果两个父接口含有同名的成员,这就产生了二义性(这也正是C#中取消了类的多继承机制的原因之一),这时需要进行显式的定义: using System ;interface ISequence { int Count { get; set; }}interface IRing { void Count(in

C#的接口基础教程之五 实现接口

1.显式实现接口成员 为了实现接口,类可以定义显式接口成员执行体(Explicit interface member implementations).显式接口成员执行体可以是一个方法.一个属性.一个事件或者是一个索引指示器的定义,定义与该成员对应的全权名应保持一致. using System ;interface ICloneable { object Clone( ) ;}interface IComparable { int CompareTo(object other) ;}class

C#的接口基础教程之三 定义接口成员

接口可以包含一个和多个成员,这些成员可以是方法.属性.索引指示器和事件,但不能是常量.域.操作符.构造函数或析构函数,而且不能包含任何静态成员.接口定义创建新的定义空间,并且接口定义直 接包含的接口成员定义将新成员引入该定义空间. 说明: 1.接口的成员是从基接口继承的成员和由接口本身定义的成员. 2.接口定义可以定义零个或多个成员.接口的成员必须是方法.属性.事件或索引器.接口不能包含常数.字段.运算符.实例构造函数.析构函数或类型,也不能包含任何种类的静态成员. 3.定义一个接口,该接口对于

【Nutch基础教程之七】Nutch的2种执行模式:local及deploy

在对nutch源码执行ant runtime后,会创建一个runtime的文件夹.在runtime文件夹下有deploy和local 2个文件夹. [[email protected] runtime]$ ls deploy  local 这2个文件夹分别代表nutch的2种执行方式:部署模式及本地模式. 1.nutch.sh中关于2种执行方式的执行 if $local; then # fix for the external Xerces lib issue with SAXParserFac

【Nutch基础教程之七】Nutch的2种运行模式:local及deploy

在对nutch源代码运行ant runtime后,会创建一个runtime的目录,在runtime目录下有deploy和local 2个目录. [[email protected] runtime]$ ls deploy  local 这2个目录分别代表nutch的2种运行方式:部署模式及本地模式. 以下以inject为例,示范2种运行模式. 一.本地模式 1.基本用法: $ bin/nutch inject Usage: InjectorJob <url_dir> [-crawlId <

基于Objectvie-C基础教程(第2版)做的笔记

基于Objectvie-C基础教程(第2版)做的笔记 第一个Objective-C 程序: main.m: #import <Foundation/Foundation.h> int main(int argc, const char *argv[]) { NSLog(@"Hello, Objective-C"); return(0); }//main #import语句:与c语言一样,Objective-C使用头文件来包含结构体/符号变量和函数原型等元素的声明. #imp

qtp:vbs基础教程

◎Vbs脚本编程简明教程之中的一个-为什么要使用Vbs?  在Windows中,学习计算机操作或许非常easy,可是非常多计算机工作是反复性劳动,比如你每周或许须要对一些计算机文件进行复制.粘贴.改名.删除.或许你每天启动计算机第一件事情就是打开WORD,切换到你喜爱的输入法进行文本编辑,同一时候还要播放优美的音乐给工作创造一个舒心的环境.当然也有可能你常常须要对文本中的某些数据进行整理,把各式各样的数据依照某种规则排列起来--.这些事情反复.琐碎,使人easy疲劳. 第三方软件或许能够强化计算