C# 扩展方法

  有许多扩展类的方式。如果有类的源代码,继承就是给对象添加功能的好方法。但是如果没有源代码,该肿么办呢?此时可以使用扩展方法,它允许改变一个类,但不需要该类的源代码。

  扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中。假定下面Demo中的Money类需要一个方法AddToAmount(decimal amountToAdd)。但是,由于某种原因,程序集最初的源代码不能直接修改。此时必须做的工作就是创建一个静态类,把方法AddToAmount()添加为一个静态方法。

 public static class MoneyExtension
    {
        public static void AddToAmount(this Money money, decimal amountToAdd)
        {
            money.Amount += amountToAdd;
        }
    }

注意AddToAmount()方法的参数。对于扩展方法,第一个参数是要扩展的类型,它放在this关键字的后面。这告诉编译器,这个方法是Money类型的一部分。在这个Demo中,Money是要扩展的类型。在扩展方法中,可以访问所扩展类型的所有公有方法和属性。

  在主程序中,AddToAmount()方法看起来像是另一个方法。它没有显示第一个参数,也不能对它进行任何处理。要使用新方法,需要执行如下调用,这与其他方法相同:

cash1.AddToAmount(10M);

  即使扩展方法是静态的,也要使用标准的实例方法语法。注意这里使用cash1是咧变量来调用AddToAmount,而没有使用类型名。

  如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法。类中已有的任何实例方法优先。

  完整Demo如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 扩展方法
{
    class Program
    {
        static void Main(string[] args)
        {
            Money cash1 = new Money();
            cash1.Amount = 40M;
            Console.WriteLine("cash1.ToSting() returns:" + cash1.ToString());

            cash1.AddToAmount(10M);
            Console.WriteLine("MoneyExtension function:" + cash1.ToString());
            Console.ReadLine();
        } 
    }

    public class Money
    {
        private decimal amount;

        public decimal Amount
        {
            get { return amount; }
            set { amount = value; }
        }

        public override string ToString()
        {
            return "$" + Amount.ToString();
        }
    }

    public static class MoneyExtension
    {
        public static void AddToAmount(this Money money, decimal amountToAdd)
        {
            money.Amount += amountToAdd;
        }
    }
}

转载于:https://www.cnblogs.com/GerryGe/p/4778463.html

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值