• 扩展方法的使用


    一、扩展方法的介绍

     我一般理解一个知识点喜欢拆分去理解,所以对于扩展方法的理解可以拆分为——首先它肯定是一个方法,然而方法又是对于一个类型而言的,所以扩展方法可以理解为现有的类型(现有类型可以为自定义的类型和.Net 类库中的类型)扩展(添加)应该附加到该类型中的方法。

      在没有扩展方法之前,如果我们想为一个已有类型自定义自己逻辑的方法时,我们必须自定义一个新的类型来继承已有类型的方式来添加方法,使用这种继承方式来添加方法时,我们必须自定义一个新的派生类型,如果基类有抽象方法还需要重新去实现抽象方法,这样为了扩展一个方法却会导致因继承而带来的其他的开销(指的是又要去自定义一个派生类,还要覆盖基类的抽象方法等),所以使用继承来为现有类型扩展方法时就有点大才小用的感觉了,并且当我们需要为值类型和密封类(不能被继承的类)这些不能被继承的类型扩展方法时,此时继承就不能被我们所用了, 所以在C#3 中提出了用扩展方法来实现为现有类型添加方法。使用扩展方法来实现扩展可以解决使用继承中所带来的所有的弊端

    扩展方法必须具备下面的规则:

    它必须在一个非嵌套、非泛型的静态类中
    它至少要有一个参数
    第一个参数必须加上this关键字作为前缀(第一个参数类型也称为扩展类型,即指方法对这个类型进行扩展)
    第一个参数不能用其他任何修饰符(如不能使用ref out等修饰符)
    第一个参数的类型不能是指针类型

    示例:

    创建一个类:

    public class Methods
    {

    }

    扩展这个类:

    public static class MethodsExtension
    {
        

    public static class MethodsExtension
    {
        public static void StringToInt(this Methods s,string y)
        {
            Console.WriteLine(Convert.ToInt32(y));
        }
    }


    }

    调用扩展方法:

    Methods m = new Methods();

    m.StringToInt("1");

    对string的扩展:

    public static class stringExtension
    {

    public static void StringToInt(this string s)
    {
    Console.WriteLine(Convert.ToInt32(s));
    }
    }

    string a = "123";
    a.StringToInt();

    主要用在封闭类开的类和对系统类的扩展

  • 相关阅读:
    git 使用详解(6) 撤消操作
    git 使用详解(7) 远程仓库的使用
    git 使用详解(8) 分支HEAD
    PHP抓取网页内容的方法
    PHP的feof()方法需要注意的地方
    PHP获取变量的变量名的一段代码的bug
    关于php的unset
    if、while中变量的作用域问题
    codeigniter的url重写问题(去掉index.php路由)
    PHP书写规范 PHP Coding Standard
  • 原文地址:https://www.cnblogs.com/ruiati/p/2891463.html
Copyright © 2020-2023  润新知