扩展方法学习总结

什么是扩展方法?怎么写扩展方法?下面将一一解答。

首先,用扩展方法的目标是对现有的类提供额外的方法以增强该类的功能。

比方说我们想把字符串的转换成第一个字母大写,其他的字母小写。现在VS并没有提供这样直接转换的功能,如果要用的话就需要截取和拼接字符串才能做到。但是如果用到的多了的话,这样做是很麻烦的。此时,我们就可以给字符串添加一个扩展方法,就像ToUpper,ToLower一样,直接点出来转换就可以完成转换。

其次,扩展方法的注意事项

1.扩展方法是一种特殊的静态方法

2.扩展方法必须在静态类中定义

3.扩展方法的优先级低于同名的类方法

4.扩展方法只在特定的命名空间内有效

下面,上代码

<span style="font-size:18px;"><span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strTest ="abc";
           ;
            Console.Write(strTest.ToPascal());  //这里直接调用了我们的扩展方法
            Console.Read();
        }

    }
    /// <summary>
    ///拓展类,只要是静态的就可以
    /// </summary>
    public static class ExtraStr
    {

        //在这里,参数里面的this就相当于指针,告诉程序,我要给哪一个类添加扩展方法
        public static string ToPascal(this string s)//给字符串类提供拓展方法
        {
            return s.Substring(0,1).ToUpper() + s.Substring(1).ToLower();
        }
    }
}
</span></span>

扩展方法还有一个特点就是只在特定的命名空间内有效,(也就是注意事项的第4条)意思是说这个扩展方法写在哪个命名空间里面了,就只能在这个命名空间内使用,换命名空间了就不能调用到它了,需要先引用扩展方法所在的命名空间。这样也挺麻烦的。那怎么办呢?当然还有很简单很直接的方法,就是将扩展方法所在类的命名空间直接改成和扩展的类的命名空间一样就可以了。比如说,string类的命名空间是System,那么我们把我们写的那个扩展方法的类的命名空间也改成System。

这样,只要用到了string,那么就一定用到了System这个命名空间,那么相当于我们的扩展方法也引用进来了。

像string这样的类都是密封类,是不能被继承的。那么如果我们想要对它进行扩展的话就需要可以用扩展方法,大大的方便了我们。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-05 23:51:42

扩展方法学习总结的相关文章

C#中的扩展方法学习总结

??版权声明:本文由秦元培创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,转载请注明作者及出处,本文作者为秦元培,本文标题为C#中的扩展方法学习总结,本文链接为http://qinyuanpei.com/2015/12/05/extend-methods-of-csharp/. ??各位朋友大家好,我是秦元培,欢迎大家关注我的博客.最近偶然接触到了C#中的扩展方法,觉得这个语法特性是一个不错的特性,因此决定在这里系统地对C#中的扩展方法相关内容进行下

扩展方法学习发展之路

大学学习的java,工作后转成了C#,由于工作需要,全力去学习了C#,学习中,相信大家都会有相同的疑惑,在判断一个字符串是否为空的时候总会用到string.IsNullOrEmpty(s)这个方法,最开始就想到了是不是反射,后面才知道这是c#的扩展方法,后面的内容慢慢讲解我对扩展方法由浅到深的理解与用法. 1:扩展方法的自定义实现,我这里特别用到了判断类型是否为数值类型的方法(可以去比较学习下),里面子定义了4个扩展方法 1 namespace ConsoleApplication1 2 { 3

C#3.0扩展方法学习篇

什么是类的扩展方法 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. MSDN Extension methods enable you to "add" methods to existing types without creating a new derived type, recompiling, or otherwise modifying the original type. Extension methods are a

C#扩展方法学习

扩展方法的本质是什么,详细见此文 C#扩展方法,爱你在心口难开 重点如下:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异. 虽然扩展方法通过实例方法语法进行调用的,但是他们却被定义为静态方法.从定义中我们可以看到,它们的第一个参数指定该方法作用于哪个类型,

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

扩展方法以及LinQ的学习

我们今天学习的内容其实还是蛮多的,学习了自动属性,扩展方法,复习初始化器,以及LinQ的一些方法,其实感觉有些还是很熟悉的,在前面的学习过程中有时间感觉学习的知识知道了怎么使用,但是还没有在项目中使用,做的习题似乎意义不大,现在依旧如此,感觉仅限于知道怎样使用.很想做一个小小的项目来熟悉下学习的知识...下面就总结下今天学习的内容. 一.自动属性 private int productid; public int Productid { get { return productid; } set

C#学习笔记(八):扩展方法

还记得第一次使用DOTween时,发现缓动方法竟然是可以直接用Transform对象中调用到,当时就被震撼到了(那是还是C#小白一只).好了不多说了,今天来学习一下C#的这个特性——扩展方法. 扩展方法简介 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 这样我们可以方便的扩展对象方法而无需使用继承,同时也可以给密封类添加方法. 我们来看一个例子: 1 using System; 2 3 namespace Study 4 { 5 class

ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归.所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然. 但是,如果手写Html标签效率又比较低,可重用度比较低.这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码: <input name="UserName&quo

[读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法

前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好处, 下一遍会单独介绍Lambda表达式. 这篇主要包括的内容有: 自动属性,隐式类型,对象集合初始化,匿名类型,扩展方法. 下面一起来看下C#3.0 所带来的变化吧. 1,自动实现的属性在C#3.0之前, 定义属性时一般会像下面这样去编写代码: 1 class Person 2 { 3 //定义私