原文地址:http://www.cnblogs.com/harleyhu/archive/2012/11/29/2794809.html

1.在father定义的方法若含有virtual关键字,child继承后并且使用override重写这个方法,

那么当father f= new child();的时候,f操作的这个方法将是child的.
2.接上,若child继承后只是用new 该方法而不是override,那么father f = new child()时,

发操作的这个方法是father上的.

3.接口里定义的方法在被father(第一级)继承后,若在father中没有使用virtual关键字修

饰方法,那么该方法将不能被child继承,child继承father,必须用new来重新实现接口中的方

法. 若要用接口来引用child,child必须继承该接口

4.接上,father中实现了接口方法且用了virtual关键字,child可以使用override来重写它,

5.当father实现接口方法而没有用 virtual关键字,child也继承接口并且用new实现接口方法

,用Interface强制转化father和child的时候,      father f = new child();
            f.Dispose();//调用的是father.
            ((father)f).Dispose();//调用的是father.
            ((IDisposable)f).Dispose();//调用的是child.

6.当father实现接口且用virtual关键字,child并且overide接口方法,此时child可以不用继

承接口,当然继承也没事
             father f = new child();
            f.Dispose();//调用的是child
            ((father)f).Dispose();//调用的是child.
            ((IDisposable)f).Dispose();//调用的是child.

7.当father实现接口没用virtual,child用new实现接口方法,但是child没有继承接口
father f = new child();
            f.Dispose();//调用的是father
            ((father)f).Dispose();//调用的是father .
            ((IDisposable)f).Dispose();//调用的是father .,特殊注明,因为child被

IDisposable转化时,只能最多到father哪里,因为child不直接继承此接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication2
{
interface IInterface
{
void Method();
} class BaseClass : IInterface
{
public virtual void Method()
{
Console.WriteLine("BaseClass Method()...");
}
} class InheritClass : BaseClass
{
public override void Method()
{
Console.WriteLine("Inherit Method()...");
}
}
class Program
{
static void Main(string[] args)
{
BaseClass bc = new BaseClass();
InheritClass ic = new InheritClass();
bc.Method();
ic.Method();
IInterface iif = new BaseClass();
iif.Method();
IInterface iif2 = new InheritClass();
iif2.Method();
Console.ReadKey();
}
}
}

C#类继承和接口继承时一些模棱两可的问题[转]的更多相关文章

  1. PHP类继承、接口继承关系概述

    PHP类继承: PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承,比如: class frist{ public function __construct(){ echo &quo ...

  2. Python学习第十八课——继承,接口继承等

    1.继承:字面意思 # 继承 : 字面意思 class father: pass class grandfather: pass class children(father): # 单继承 pass ...

  3. Effective C++ 笔记:条款 34 实现继承和接口继承

    Differentiate between inheritance of interface and inheritance of implementation. 行为含义 声明一个pure virt ...

  4. php中类继承和接口继承的对比

    PHP类继承: 1.PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承,比如: class frist{ public function __construct(){ echo &q ...

  5. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

  6. python开发面向对象基础:接口类&抽象类&多态&钻石继承

    一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实 ...

  7. python定义接口继承类

    zxq547 python定义接口继承类invalid syntax解决办法 1 2 3 4 5 6 7 class s_all(metaclass=abc.ABCMeta):     #python ...

  8. java基础知识总结--继承和接口

    什么是继承?什么是接口?他们之间的区别和联系是什么? 什么是继承? 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能.多个类中存在相同属性和行 ...

  9. python面向对象编程 继承 组合 接口和抽象类

    1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...

随机推荐

  1. PHP实现四种基本排序算法

    前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思 ...

  2. 这两年在QQGame写过的游戏(2012.7.15-2014.8.25)

    [雷电]  Gamebryo         http://qqgamecdnimg.qq.com/help/rule177.html [英雄杀]          http://yxs.qq.com ...

  3. C++中随机数和不重复的随机数

    随机数 int rand (); rand函数返回一个0-32767之间的一个伪随机整数,32767可以由宏RAND_MAX表示,该函数需要头文件<stdlib.h>. 常用的是如何生成一 ...

  4. android用户界面之Gallery3D学习资料汇总

    一.Gallery之根蒂根基教程1.Android Gallery与衍生BaseAdapter容器 http://www.apkbus.com/android-6249-1-1.html 2.Andr ...

  5. iTextSharp简单生成pdf和操作pdf添加水印

    遇到需要导出页面到pdf,并添加pdf水印的业务.稍微研究了下,借阅网友的前车之鉴,经过使用可行之后的代码贴出来,做个记录,也供需要的网友借阅. public class PDFSetWaterMar ...

  6. [leetcode] 一些会的

    链表: 61. Rotate List Given a list, rotate the list to the right by k places, where k is non-negative. ...

  7. linux shell 常用指令

    1. man 对你熟悉或不熟悉的命令提供帮助解释 eg:man ls 就可以查看ls相关的用法 注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行. 2. ls 查看目 ...

  8. MVC和WebForm 中国省市区三级联动

    MVC和WebForm是微软B/S端的两条腿,两种不同的设计理念,相对来说MVC更优于WebForm对于大数据的交互,因为WebForm是同一时间传输所有数据,而MVC它只是传输所用到的数据,更精确, ...

  9. 简单的网络引导安装CentOS7

    实验室有几台电脑,里边装有windows,因为实验需求要给其装入CentOS7.但是这几个电脑无法用U盘引导系统的安装,虽然带有光驱,但是又不想麻烦去买碟片,所以便想到用网络引导系统的安装. 1. 软 ...

  10. 【BZOJ1180】: [CROATIAN2009]OTOCI & 2843: 极地旅行社 LCT

    竟然卡了我....忘记在push_down先下传父亲的信息了....还有splay里for():卡了我10min,但是双倍经验还是挺爽的,什么都不用改. 感觉做的全是模板题,太水啦,不能这么水了... ...