C#神奇的扩展方法

以前总听说扩展方法扩展方法,只是听说是C#3.0后出来的新玩意,也仅仅是知道Linq中用到好多的扩展方法,但是他究竟是个什么东东,怎么用它,用它的好处是什么,总是模模糊糊,那么我们今天就尝试揭开它神秘的面纱。

  我们现在看到每个方法都和声明它的类关联,但是C#3.0的扩展方法的特性扩展了这个边界,允许编写和声明它的类之外的类关联的方法。想要知道如何利用这个特征,我们先看一个例子:

class MyData
{
    double D1,D2,D3;
    public MyData(double d1,double d2,double d3)
    {
        D1=d1;D2=d2;D3=d3;
    }
    public double Sum()
    {
        return D1+D2+D3;
    }
}

   这是一个非常简单而且功能有限,但假设它含有另外一个方法会更有用,该方法返回三个数据的平均值.那么我们有几种方法可以实现这个增加的功能.

  • 如果我们有源代码,那么我们可以直接修改这个类,将方法直接添加进去.
  • 然而,如果我们不能修改这个类,例如,如果这个类在一个第三方的类库中,那么只要它不是密封的,那么我们可以把它当作基类并在派生类中实现这个新增的方法.

  如果我们不能访问代码,或该类是密封的,或有其它设计原因使这些方法不能工作,那么我们不得不在另外一个类中使用该类的公有可用成员编写一个方法.

例如,我们可以编写一个下面代码中这样的类:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

Python3 与 C# 基础语法对比(String专栏)

Python3 与 C# 基础语法对比:https://www.cnblogs.com/dotnetcrazy/p/9102030.html

622
来自专栏小詹同学

Leetcode打卡 | No.010 正则表达式匹配

欢迎和小詹一起定期刷leetcode,每周一和周五更新一题,每一题都吃透,欢迎一题多解,寻找最优解!这个记录帖哪怕只有一个读者,小詹也会坚持刷下去的!

944
来自专栏C/C++基础

我所理解的C++反射机制

在实际的项目中,听到师兄说C++中用到了反射,出于好奇,就查阅相关资料,发现强大的C++本身并不支持反射,反而Java支持反射机制。当我得知这个事实时,一直唯C...

462
来自专栏数值分析与有限元编程

Python也能干大事

用Python做数值计算,和MATLAB一样简洁方便,关键是Python还是免费的,不用担心版权的问题。下面举几个例子。 1.计算方阵行列式 ? 在Anacon...

3169
来自专栏大壮

UIKit框架 - TextKit

1694
来自专栏前端新视界

相邻不重复随机数的生成及优化

生成相邻不重复随机数是之前抽奖插件的遗留问题,在之前的文章中已经简单说过,但没有更好的解决方案。经过一个多月的修改,抽奖插件已经趋于完善,在此分享一下这个问题的...

2095
来自专栏WeaponZhi

AI 学习之路——轻松初探 Python 篇(二)

这是「AI 学习之路」的第 2 篇,「Python 学习」的第 2 篇 我将分两篇讲解下 Python 的基础语法,这是第一篇。大家也可以在很多地方看到入门的学...

35912
来自专栏苍云横渡学习笔记

【day 4】python编程:从入门到实践学习笔记-字典(末附练习答案代码)

学习笔记目录 【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型 【day 2】python编程:从入门到实践学习笔记-列表以及其操...

3167
来自专栏企鹅号快讯

30分钟学会用Python编写简单程序

参与文末每日话题讨论,赠送异步新书 异步图书君 学习目标 知道有序的软件开发过程的步骤。 了解遵循输入、处理、输出(IPO)模式的程序,并能够以简单的方式修改它...

28310
来自专栏cs

python循环综合运用

循环很重要,计算机很蠢,唯一的优势就是按照指令不停的执行,所以决定在说一下。 break语句,用在循环体中,迫使循环立即终止,即跳出所在循环体,继续执行循环体后...

3087

扫描关注云+社区