类继承 和 接口继承

类继承        一个类型派生于一个基类行,它拥有该基类型的所有成员字段和函数。

接口继承     一个类型继承函数的签名,不需要实现代码。

多重继承

一个类派生自多个类。多重继承编写非常复杂,难维护。因此C# 不支持多重继承。但可以 派生自多个接口,多重接口继承。

结构和类

结构(值类型) 和 类(引用类型)。使用结构的一个限制是结构不支持继承,每个结构自动派生自System.ValueType。结构不能实现类型继承,但是实现接口继承。

  • 结构总是派生自 System.ValueType ,它们可以派生自任意多个接口。
  • 类总派生自 Syste.Object 或 用户选择的另一个类,它们还可以派生自任意多个接口。

实现继承

public class Money : MyBaseClass
{ }

C++ 支持 公共继承、私有继承的概念,要注意C#不支持私有继承。因此类名上没有 public 和 private 限定符,私有继承只会增加复杂性,所以C++也使用的非常少。

派生 类 和 接口

public class Money : MyBaseClass, IInterface1, IInterFace2
{ }

结构

public struct Money : IInterface1, IInterFace2
{ }

虚方法

C# 虚函数的概念与标准 OOP 的概念形同:可以在派生类中重写虚函数。除了构造函数以外,可以显式的声明 virtual 。而在Java中,所有的函数都虚函数。

public class MyBaseClass
{
public virtual void VirtualMethod()
{ }
} public class Money : MyBaseClass
{
public override void VirtualMethod()
{
base.VirtualMethod();
}
}

成员字段和静态函数都不能声明为virtual。

隐藏方法

签名相同的方法在基类和派生类中进行声明,但该方法没有分别声明为 virtual 和 override。派生类方法就会隐藏基类方法。使用new关键来隐藏方法。

public class MyBaseClass
{
public new void VirtualMethod()
{ }
} public class Money : MyBaseClass
{
public void VirtualMethod()
{ }
}

调用基类方法

base.VirtualMethod();

抽象类 和 抽象函数

C# 允许把类 和 函数 声明 为 abstract。 抽象类不能实例化,而抽象函数不能直接实现,必须在非抽象的派生类中重写。抽象函数本身就是虚拟的,所以不能加 virtual 关键字。

C++中 抽象函数 称为 纯虚函数 。C# 称为 抽象函数。

abstract public class MyBaseClass
{
public abstract void VirtualMethod();
} public class Money : MyBaseClass
{
public override void VirtualMethod()
{ }
}

密封类和密封方法

sealed

  • 类 表示不能继承该类
  • 方法  表示不能重写该方法
sealed public class MyBaseClass
{
public void VirtualMethod()
{ }
}

string就是一个密封类。 sealed 也可以用在 重写函数 。防止别人重写函数。

派生类的构造函数

构造函数的执行顺序是由上向下进行,最先调用的总是基类的构造函数。

在层次结构中添加无参数的构造函数

public abstract class MyBaseClass
{
private string name;
public MyBaseClass() : base()
{
name = "<no name>";
}
}

带参数的构造函数 

public abstract class MyBaseClass
{
private string name;
public MyBaseClass(string name)
{
this.name = name;
}
} public class Money : MyBaseClass
{
public Money(string name) : base(name)
{ }
}

其他修饰符 

extern 调用外部 dll 时,使用。

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

介绍

http://blog.csdn.net/llddyy123wq/article/details/5620466

接口

public interface IDisposable
{
void Dispose();
}

声明接口在语法上与声明抽象类相同,也不允许包含运算符重载,不能有构造函数,不能实现任何成员的实现方式。

派生接口类

public interface IDisposable
{
void Dispose();
} class MyClass : IDisposable
{
public void Dispose()
{ }
}

接口名称通常以字母I开头,接口应用强大的之处在于,它可以引用任何实现该接口的类。

接口派生接口

public interface IBankAccount
{
void PayIn(decimal amount);
bool Withdraw(decimal amount);
decimal Balance { get; }
} public interface ITransferBankAccount : IBankAccount
{
bool TransferTo(IBankAccount distination, decimal amount);
} public class CurrentAccount : ITransferBankAccount
{
public void PayIn(decimal amount)
{ } public bool Withdraw(decimal amount)
{ } public decimal Balance { get; } public bool TransferTo(IBankAccount distination, decimal amount)
{ }
}

C# 继承(3)持续更新的更多相关文章

  1. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

  2. ( 译、持续更新 ) JavaScript 上分小技巧(一)

    感谢好友破狼提供的这篇好文章,也感谢写这些知识点的作者们和将他们整理到一起的作者.这是github上的一篇文章,在这里本兽也就只做翻译,由于本兽英语水平和编程能力都不咋地,如有不好的地方也请多理解体谅 ...

  3. 关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】

    最近一直用ASP.NET MVC 4.0 +LINQ TO SQL来开发设计公司内部多个业务系统网站,在这其中发现了一些问题,也花了不少时间来查找相关资料或请教高人,最终都还算解决了,现在我将这些问题 ...

  4. UIButton 文档翻译(持续更新)

    UIButton 文档翻译 继承 UIControl; UIView; UIResponder; NSObject 协议 UIFocusEnvironment,UIAppearanceContaine ...

  5. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  6. 【 js 基础 】【 源码学习 】源码设计 (持续更新)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...

  7. 【持续更新】JavaScript常见面试题整理

    [重点提前说]这篇博客里的问题涉及到了了JS中常见的的基础知识点,也是面试中常见的一些问题,建议初入职场的园友Mark收藏,本文会持续更新~ 1. 引入JS的三种方式 1.在HTML标签中直接使用,直 ...

  8. web前端面试题(持续更新)

    此文是我本人在面试的时候遇到的问题和一些同学遇到的问题加资料上面的问题的总结.(将会持续更新,因为未有满意工作) 面试时有几点需要注意: 1.面试题目:根据你的等级和职位的变化,入门级到大神级,广度和 ...

  9. tp5 使用技巧(持续更新中...)

    tp5 使用技巧(持续更新中...) 1.自动写入时间 create_time和update_time 使用save方法才行,insert方法不生效,不知为何 2.过滤字段 allowfield和st ...

  10. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

随机推荐

  1. 教程2:如何找到内存泄漏dotmemory

    在本教程中,我们将看到如何使用dotmemory定位和固定在你的应用程序的内存泄漏.但在开始之前,让我们在一个内存泄漏是一致的. 内存泄漏是什么? 根据维基百科,内存泄漏是由于不正确的内存管理时,”一 ...

  2. 课程设计之C/C++实现用户登录注册

    最近的一个课程设计要求的一个用户登录的程序,通常软件网页等的用户登录注册都是涉及到数据库.但像课程设计这种小程序要求的安全度不高就可以用c/c++实现. 首先,我们要清楚用户登录的流程.应该大家对这些 ...

  3. [LuoguP2151][SDOI2009]HH去散步_递推_矩阵乘法_图论

    HH去散步 题目链接:https://www.luogu.org/problem/P2151 数据范围:略. 题解: 数据范围好小,让人不禁想用一些毒瘤算法,但是失败了. 这种类似时间啊这种有点重复味 ...

  4. HTTP协议的简单了解

    1. 用于服务端和客户端通信 客户端发送请求,服务端提供资源: 通过URI定位资源. 2. 通过请求和响应交换进行通信 客户端发送请求,服务端响应请求并返回数据: 请求报文:请求方法.URI.协议版本 ...

  5. Codeforces Round #590 (Div. 3)补题

    要想上2000分,先刷几百道2000+的题再说 ---某神 题目 E F 赛时是否尝试 × × tag math bitmask 难度 2000 2400 状态 ∅ √ 解 E 待定 F 传送门 第一 ...

  6. Asp.net core 学习笔记 ef core Surrogate Key, Natural Key, Alternate Keys

    更新: 2019-12-23 foreignkey 并不一样要配上 alternate key,其实只要是 unique 就可以了. 和 sql server 是一样的, 经常有一种错觉 primar ...

  7. 我的第一个python web开发框架(2)——第一个Hello World

    小白中午听完老菜讲的那些话后一直在思考,可想来想去还是一头雾水,晕晕呼呼的一知半解,到最后还是想不明白,心想:老大讲的太高深了,只能听懂一半半,看来只能先记下来,将明白的先做,不明白的等以后遇到再学. ...

  8. Spring集成kafka,消费者运行时内存占用会一直增长

    Spring集成kafka,消费者运行时内存占用会一直增长? 20C 本人用Spring集成kafka消费者,发布运行时内存占用会一直升高,最后程序挂掉.请各位大神看看,提供解决方法 以下是我的配置文 ...

  9. .net Core 图片验证码 基于SkiaSharp实现

    public class ImageCaptcha { /// <summary> /// 干扰线的颜色集合 /// </summary> private List<SK ...

  10. ADO与达梦7产生的一个未知问题

    采用OLEDB与达梦7建立数据库连接 连接成功 查询表成功 打开表成功 当进行到addnew 操作时  报异常,未知错误 而且是仅针对这张表 ,其他表都没有问题 当清空数据后可以再插入一次数据,之后就 ...