• 3.8 扩展方法


    3.8 扩展方法

    什么是扩展方法

    对于有源代码的类,可以直接修改代码,添加或修改method等内容,对于没有源代码的类想要修改代码怎么办,在这里就可以使用扩展方法
    扩展方法允许改变一个类,但不需要该类的源代码

    扩展方法是静态方法,是类的一部分,但实际上并没有放在类的源代码中

    举个栗子

    Money类

    public class Money
    {
        public decimal Amount { get; set; }
    
        public override string ToString()
        {
            return "$" + Amount.ToString();
        }
    }
    

    扩展方法

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

    控制台中调用

    Money cash1 = new Money();
    
    // call extension
    cash1.AddToAmount(50M);
    
    Console.WriteLine("return: " + cash1.ToString());
    Console.ReadLine();
    

    结果

     return $50
    

    实现扩展方法

    1. 对于扩展方法,第一个参数是要扩展的类型,它放在this关键字后面,这是告诉编译器,这个方法是要扩展的类型的一部分,在扩展方法中,可以访问所扩展类型的所有公有方法的和属性
    2. 扩展方法实现类必须是一个静态类,实现的扩展方法也必须是静态方法.
    3. 在调用程序中,AddToAmount()方法看起来像是另一个方法,他没有显示第一个参数,也不能对它进行任何处理.
    4. 即使扩展方法是静态的,也要使用标准的实例方法语法(使用类的实例来调用)
    5. 如果扩展方法与类中的某个方法同名,就从来不会高用扩展方法,类中已有的任何实例方法优先.
  • 相关阅读:
    Docker简介,安装,配置
    Centos7给 root 账户开通ssh权限
    [转载]Hyper-v 安装CentOS 7
    软件开发_六大原则
    php函数名后冒号(:)+数据类型(返回值类型限制/php新特性)
    MySQL--事务介绍
    MySQL存储引擎
    leetcode刷题笔记300题 最长上升子序列
    leetcode刷题笔记299题 猜数字游戏
    **leetcode刷题笔记四 两个有序序列的中位数**
  • 原文地址:https://www.cnblogs.com/lost0/p/4560353.html
Copyright © 2020-2023  润新知