• C# 扩展方法


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1.test1
    {
        //原文:https://www.cnblogs.com/wolf-sun/p/4216256.html
        //扩展方法,在无法修改源代码的情况下,提供了一种为该类来添加行为的方式
    
        /*
            1.定义一个静态类以包含扩展方法。 该类必须对客户端代码可见。 
            2.将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。
            3.该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。
            4.在调用代码中,添加一条 using 指令以指定包含扩展方法类的命名空间。
            5.按照与调用类型上的实例方法一样的方式调用扩展方法。
            请注意,第一个参数不是由调用代码指定的,因为它表示正应用运算符的类型,并且编译器已经知道对象的类型。 您只需通过 n 为这两个形参提供实参。
    
    
            1、扩展方法为静态方法,所在的类必须为静态类,方法第一个参数必须以this修饰符开头。
            2、扩展方法在使用的时,必须能够访问到。
            3、在使用时需引入扩展方法所在的命名空间。
                当然你也可以直接使用要扩展的类型的命名空间,
                比如string类型的命名空间为System,
                你可以使用System作为StringExtension的命名空间,
                这样使用的时候不需要引入命名空间了。但一般不建议这样做!
        */
    
    
        public class Class6
        {
            public static void test1()
            {
                string str1 = "123";
                Console.WriteLine(str1.GetBytesLength());
    
                string str2 = "123";
                Console.WriteLine(str2.GetStrJoinName("一二三"));
    
                int id1 = 123;
                Console.WriteLine(id1.GetStringFormat());            
    
                Student student1 = new Student { Name = "name1", LastName = "name2" };
                Console.WriteLine("name:" + student1.GetName());
                Console.WriteLine("old name:" + student1.GetLastName());
            }
        }
    
    
        public class Student
        {
            public string Name { get; set; }
            public string LastName { get; set; }
            public string GetName()
            {
                return this.Name;
            }
        }
        //Student 扩展
        public static class StudentExt
        {
            public static string GetLastName(this Student source)
            {
                return source.LastName;
            }
        }
    
    
        //int 扩展
        public static class IntExtension
        {
            public static string GetStringFormat(this int source)
            {
                return "字符串格式:" + source.ToString();
            }        
        }
    
        //string 扩展
        public static class StringExtension
        {
            //获取字符串的字节数
            public static int GetBytesLength(this string source)
            {
                byte[] bytes = Encoding.Default.GetBytes(source);
                return bytes.Length;
            }
    
            //字符串连接
            public static string GetStrJoinName(this string source, string name)
            {
                return source + " 连接 " + name;
            }
        }
    
    
    
    }
  • 相关阅读:
    基于组的策略(GBP)开启新型网络设计时代
    49 多维数组(二维数组)
    48 查找
    47 排序
    46 字符数组和字符串
    45 数组应用
    44 数组
    43 C语言宏定义
    42 预处理命令
    41 函数封装练习
  • 原文地址:https://www.cnblogs.com/guxingy/p/10435821.html
Copyright © 2020-2023  润新知