文档章节

C#中增量类功能的方式之 继承与扩展

o
 osc_isezqdgg
发布于 2019/09/18 14:38
字数 1261
阅读 14
收藏 0

精选30+云产品,助力企业轻松上云!>>>

之前一次公司培训的时候,将它记录下来,https://www.cnblogs.com/AlvinLee/p/10180536.html这个博客上面比较全面。

1、扩展方法

  扩展方法是一种特殊的静态方法,可以像该类的实例方法一样使用,能够在不添加新的派生类,重新编译的情况下,向现有类添加功能

  注意事项:

    a、必须定义在非泛型静态类中

    b、必须是public的静态方法,并且第一个方法必须使用this关键字修饰

    c、使用using关键字显示导入扩展方法命名空间后才能使用

    d、实例方法优先于扩展方法执行

    e、可以在空引用上调用扩展方法

    f、扩展方法可以被继承

2、partial

  partial关键字拆分一个类、结构、接口、方法的定义至多个文件中,每个源文件中包含类型或方法定义的一部分,在编译时被组合成一个完整的类。

  使用场景:

    a、一个类分布于多个独立文件中跨域让多位程序员同事对该类进行处理

    b、当使用自动生成文件的源文件时,将自动生成的代码与手动添加的代码分布在不同文件

  注意事项:

    a、不分类的各个部分必须具有相同的可访问性

    b、如果将任意部分声明为抽象类

    c、如果任意部分声明了其基类型,则整个类继承该类

    d、部分类的各个部分都必须在同一程序集和同一模块(.exe 或 .dll 文件)中进行定义。

    e、部分方法必须以partial开头,不能包含out参数,不能为virtual方法,返回值必须为void

    f、可以为已定义并实现的分部方法生成委托,但不能为已经定义但未实现的分部方法生成委托

3、继承

  a、面向对象的三大特征之一

  b、通过继承可以重用、扩展、修改积累中的行为

  c、基类具有传递性

  Struct结构是否支持继承?

  如何防止类被进一步派生?

  如何在派生类中隐藏类成员?

  继承缺点:

    a、类只支持单继承

    b、破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性,基类细节对派生类可见

    c、子类不能改变父类的接口

    e、不支持动态继承,在运行时,子类无法选择不同的父类

4、继承之模板方法

  定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可冲定义该算法的某些特定步骤

  使用场景:

    a、有多个子类共有的方法,且逻辑相同

    b、重要的、复杂的方法,可以考虑作为模板方法

  优点:

    a、封装不变部分,扩展可变部分

    b、提取公共代码,便于维护

    c、行为由父类控制,子类实现

  缺点:

    每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

5、组合

  什么是组合?

    组合是通过对现有的对象进行拼装(组合)产生新的、更复杂的功能

  优点:

    a、不破坏封装,整体类与局部类之间松耦合,彼此相互独立

    b、支持动态组合,在运行时可以设置不同的局部实现

    c、整体可以对局部类进行包装,封装局部类的接口,提供新的接口

  缺点:

    a、创建整体类的对象时,需要创建所有局部类的对象

    b、设计复杂度增高

6、建造者模式(在后续的文章中,会详细描述下设计模式)

  建造者模式将一个复杂的构建与其表示相分离,是的同样的构建过程可以创建不同的表示

  主要角色:

    a、控制者(Director):控制对象的组合过程

    b、构建者(Builder):构建者接口,定义构建各部件的方法。

    c、实际构建者(ConcreteBuilder):具体构建出各部件对象,获得构造结构。

    d、被创建者(Product):构建者操作的主要对象

  使用场景:

    a、被创建者对象由很多组件构成,他们之前创建的顺序不变,但是组件的创建细节不一致

    b、被创建者对象具有复杂的内部结构

    c、被创建者对象内部属性本身相互依赖

  优点:

    a、建造者独立,易扩展

    b、便于控制细节风险

  缺点:

    a、产品必须有共同点,范围有限制

    b、内部变化复杂,会有很多的建造类

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
从C#到Objective-C,循序渐进学习苹果开发(3)--分类(category)和协议Protocal的理解

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验。本文继续上一篇随笔...

walb呀
2017/12/04
0
0
深入剖析C#的多态

作者: 天雨 一、什么是多态 面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。可以把一组对象放到一个数组中,然后调用它们的方...

晨曦之光
2012/03/09
188
0
剖析C#的多态

一、什么是多态 面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。可以把一组对象放到一个数组中,然后调用它们的方法,在这种...

晨曦之光
2012/03/09
82
0
Scala特质 五: "混入特质"为什么不是"多继承"、 线性化、 是否使用特质

abstract class IntQueue{ def put(x: Int) def get(): Int} trait Doubling extends IntQueue { abstract override def put(x: Int) { super.put(x * 2)}} trait Incrementing extends IntQ......

翻船全靠浪
2015/10/22
2
0
C#面向对象三大特性:继承

什么是继承 定义:继承是面向对象编程语言中的一个重要特性,当一个类A能够获取另一个类B中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间具有继承关系。被继承...

osc_6k4tw8mn
2019/09/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用CSS按比例调整图像大小? [重复] - Resize image proportionally with CSS? [duplicate]

问题: This question already has an answer here: 这个问题在这里已有答案: How do I auto-resize an image to fit a 'div' container? 如何自动调整图像大小以适合“div”容器? 31 ans......

fyin1314
今天
18
0
define()与const - define() vs. const

问题: In PHP, when do you use 在PHP中,何时使用 define('FOO', 1); and when do you use 以及何时使用 const FOO = 1; ? ? What are the main differences between those two? 两者之......

法国红酒甜
今天
26
0
将Node.js升级到最新版本 - Upgrading Node.js to latest version

问题: So, I have Node.js installed and now when I tried to install Mongoosejs I got an error telling me that I don't have the needed version of Node.js (I have v0.4.11 and v0.4......

javail
今天
17
0
等到所有jQuery Ajax请求都完成了吗? - Wait until all jQuery Ajax requests are done?

问题: How do I make a function wait until all jQuery Ajax requests are done inside another function? 我如何让一个函数等到所有jQuery Ajax请求都在另一个函数中完成之后? In short...

富含淀粉
今天
17
0
OSChina 周日乱弹 —— 那么长的绳子,你这是放风筝呢

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @ 巴拉迪维:黑豹乐队的单曲《无地自容》 耳畔突然响起旋律,是那首老歌。中国摇滚有了《一无所有》不再一无所有;中国摇滚有了《无地自容》不...

小小编辑
今天
103
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部