zoukankan      html  css  js  c++  java
  • C#扩展方法

    扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。 扩展方法当然不能破坏面向对象封装的概念,所以只能是访问所扩展类的public成员。

    扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

    C#扩展方法第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。
    扩展方法的目的就是为一个现有类型添加一个方法,现有类型既可以是int,string等数据类型,也可以是自定义的数据类型。例如为数据类型的添加一个方法的理解:一般来说,int数据类型有个Tostring的方法,就是把int 数据转换为字符串的类型,比如现在我们想在转换成字符串的时候还添加一点东西,比如增加一个字符 a .那么之前的Tostring就不好使了,因为它只是它我们的int数据转换为string类型的,却并不能添加一个字母 a.所以这就要用到所谓的扩展方法了。首先我们看一个给现有的类型增加一个扩展方法。我们想给string 类型增加一个Add方法,该方法的作用是给字符串增加一个字母a.

    示例1:

    static void Main(string[] args)
            {
                string str = "AoMan";
                //Tips:必须使用对象来调用
                string newStr = str.Add();
                Console.WriteLine($"str:{str}--newStr:{newStr}");
    
                Console.ReadKey();
            }
    
    
            /* 声明扩展方法
             * 扩展方法必须是静态的
             * this必须有,string表示我要扩展的类型,strVal表示对象名
             * 3个参数this和扩展的类型必不可少,对象名可以自己随意取
             * 如果需要传递参数,再增加一个变量即可
             */
            public static string Add(this string strVal) {
                return strVal + "YuPianjian";
            }
    

    示例2:

    再尝试给自定义的类型增加两个扩展方法

    1、定义一个Student实体

    public class Student
        {
            public string StudentName { get; set; }
            public string StuId { get; set; }
        }
    

    2、定义扩展方法

    public static class StudentExtension
        {
            //不带参数的自定义类型扩展方法
            public static string StuInfo(this Student student)
            {
                return $"学生姓名:{student.StudentName}
    学生学号:{student.StuId}";
            }
    
            //带参数的自定义类型扩展方法
            public static string StuInfoToJson(this Student student, string stuName, string stuId)
            {
                return $"{{"StudentName":"{stuName}","StuId":"{stuId}"}}";
            }
        }
    

    Tips:按照惯例扩展方法类最好以Extension结尾

    3、调用扩展方法

    Student student = new Student
                {
                    StudentName = "张三",
                    StuId = "1704030434"
                };
                Console.WriteLine(student.StuInfo());
    
                Console.WriteLine(student.StuInfoToJson(student.StudentName,student.StuId));
    
                Console.ReadKey();
    

    输出:

    image-20210824215547032

  • 相关阅读:
    js笔记一:在HTML中使用javascript
    opencv排错总结
    《学习openCV》例程解析 ex_8_2 (轮廓)
    《学习openCV》例程解析 ex_9_3(codeBook模型实现背景减除)
    《学习openCV》例程解析 ex_9_1 (像素片段)
    《学习openCV》例程解析 ex_9_2(背景减除)
    《学习openCV》例程解析 ex_8_3 (轮廓)
    JavaScript鼠标事件
    sumlime text2 快捷键
    HTML字符实体(转)
  • 原文地址:https://www.cnblogs.com/chonglu/p/15182789.html
Copyright © 2011-2022 走看看