专栏首页hbbliyongC#神奇的扩展方法

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 条评论
登录 后参与评论

相关文章

  • C#基础知识回顾-- 反射(1)

    反射(reflection)是一种允许用户获得类型信息的C#特性。术语“反射”源自于它的工作方式: Type对象映射它所代表的底层对象。对Type对象进行...

    hbbliyong
  • WPF文字修饰——上、中、下划线与基线

           我们知道,文字的修饰包括:空心字、立体字、划线字、阴影字、加粗、倾斜等。这里只说划线字的修饰方式,按划线的位置,我们可将之分为:上划线、中划线、基...

    hbbliyong
  • win10下端口被占用解决办法

    调试socket通信的时候,如果程序未正常结束,重新启动会报端口被占用的错误。 一 查找被占用的端口 解决办法如下:按win+R输入cmd打开控制台,输入 ne...

    hbbliyong
  • 语法基础-方案一:C#阶段项目

    项目名称:制作一款窗口程序的飞行棋项目 项目需求:要求至少两人对战 开发周期:两天

    雷潮
  • Otto产品分类挑战赛亚军:不要低估最近邻算法

    用户1737318
  • Xenoma推出手势追踪衬衫E-Skin,同时开放“皮肤”SDK

    在虚拟现实(VR)的早期阶段,许多公司正在尝试如何使VR更加身临其境,从而俘获消费者的心。下个月,Xenoma将推出一项Kickstarter众筹活动,旨在为e...

    BestSDK
  • 开发 | 用 Kaggle 经典案例教你用 CNN 做图像分类!

    前言 在上一篇专栏中,我们利用卷积自编码器对 MNIST 数据进行了实验,这周我们来看一个 Kaggle 上比较经典的一个图像分类的比赛 CIFAR( CIFA...

    AI科技评论
  • 用Kaggle经典案例教你用CNN做图像分类!

    前言 在上一篇专栏《利用卷积自编码器对图片进行降噪》中,我们利用卷积自编码器对 MNIST 数据进行了实验,这周我们来看一个 Kaggle 上比较经典的一...

    AI研习社
  • 从 App 描述介绍文字中发掘 Python 文本数据预处理实例

    除了数据清洗和数据探索的主题外,许多有效的NLP(自然语言处理)分析都是依赖于对文本数据的预处理。因此,我决定手把手展现一个对来自苹果App Store简述的文...

    AI研习社
  • 【机器学习入门系列】梯度下降法

    什么是梯度下降法?学习速率的引入;如何调整学习速率;Adagrad算法介绍;用泰勒展开式对梯度下降法进行数学理论支持。

    张耀琦

扫码关注云+社区

领取腾讯云代金券