C#基础知识---扩展方法

一、简介

扩展方法为现有的类型(.Net类型或者自定义类型)扩展应该附加到该类型中的方法。

二、基本原则

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

三、例子

  例1:为.Net类型添加扩展方法

 1 using System;
 2
 3 namespace ExtensionMethod
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             string myStr = "YuanXi";
10             string tmpStr1 = myStr.GetNotNullString();
11             Console.WriteLine(tmpStr1);
12
13             myStr = null;
14             tmpStr1 = myStr.GetNotNullString();
15             Console.WriteLine(tmpStr1);
16         }
17     }
18     public static class StringExtension
19     {
20         public static string GetNotNullString(this string str)
21         {
22             return str ?? string.Empty;
23         }
24     }
25 }

  例2:为自定义类型添加扩展方法

  

 1 using System;
 2
 3 namespace ExtensionMethod
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             int a = 4;
10             int b = 1;
11             Calculator cal = new Calculator();
12             int r = cal.Add(a, b);
13             int r2 = cal.Sub(a, b);
14             Console.WriteLine($"Add result is: {r}");
15             Console.WriteLine($"Sub result is: {r2}");
16         }
17     }
18     public class Calculator
19     {
20         public int Add(int a, int b)
21         {
22             return a + b;
23         }
24     }
25     public static class CalculatorExtension
26     {
27         public static int Sub(this Calculator cal, int a, int b)
28         {
29             return a - b;
30         }
31     }
32     public static class StringExtension
33     {
34         public static string GetNotNullString(this string str)
35         {
36             return str ?? string.Empty;
37         }
38     }
39 }

  

原文地址:https://www.cnblogs.com/3xiaolonglong/p/9662452.html

时间: 2024-07-30 04:15:45

C#基础知识---扩展方法的相关文章

C#基础之扩展方法

扩展方法使您能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异. --- 摘自MSDN 下面我们自己定义一个A类和Program类来为string扩展方法  public static class A     {         public static 

C#基础知识之方法重载总结

1.首先解释一下什么是方法重载?    方法重载是指在同一个类中方法同名,参数不同,调用时根据实参的形式,选择与他匹配的方法执行操作的一种技术. 这里所说的参数不同是指以下几种情况: ①  参数的类型不同 ②  参数的个数不同 ③  参数的个数相同且类型不同时,它们的先后顺序不同 需要注意的是:方法的重载跟返回值没有任何的关系! 错误示例: public void test(int i1,string s1) { } public void test(int i2,string s2) { }

计算机组成原理基础知识-运算方法

五.计算机的运算方法 --在计算机中参与运算的数有两大类:无符号数和有符号数 无符号数:没有符号的数 有符号数 机器数与真值:机器中:0表示正,1表示负 原码表示法:把真值的正负用01表示 补码表示法:真值为正时,与原码相同,真值为负时,补码是原码的"求反加一" 反码表示法:真值为正时,与原码相同,真值为负时,补码是原码的"每位求反" 移码表示法:同一个真值的移码和不忙吗只差一个符号位 --表示小数点的存在:定点表示和浮点表示 --定点运算:移位运算.加法与减法运算

java基础知识之方法

1.什么是方法 1.封装一段特定的业务逻辑功能 2.尽可能独立只干一件事 3.被反复多次调用 4.减少重复,有利于维护,有利于团队协作 2.方法的定义 修饰词 返回值类型 方法名(参数列表){ 方法体 } 3.方法的调用 1.无返回值:方法名() 2.无返回值:方法名(参数列表) 3.有返回值:对应数据类型 变量=方法名() 4.有返回值:对应数据类型 变量 = 方法名(参数列表) 原文地址:http://blog.51cto.com/10972685/2069998

java基础知识之方法的概述及基本使用

1.1 方法定义格式及格式解释2.1.1.1 方法的概述假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹(植物大战僵尸).发射炮弹的动作需要编写100行的代码,在每次实现发射炮弹的地方都需要重复地编写这100行代码,这样程序会变得很臃肿,可读性也非常差.为了解决代码重复编写的问题,可以将发射炮弹的代码提取出来放在一个{}中,并为这段代码起个名字,这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了.上述过程中,所提取出来的代码可以被看作是程序中定义的一个方法,程序在需要发射炮弹

C#基础知识---匿名方法使用

一.匿名方法使用 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace AnonymousMethod 8 { 9 delegate void DelegateWithoutArguments(); 10 delegate void DelegateWithArgument

java基础知识回顾之---java String final类普通方法

辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      *      * 1,获取:     * 1.1 获取字符串中字符的个数(长度).     *         int length();     * 1.2 取字符串中的某一个字符,其中的参数index指的是字符串中序数.字符串的序数从0开始到length()-1 .     *       

C#语言基础知识(4):C#中的String.Format方法

定义String.Format是将指定的String类型的数据中的每个格式项替换为相应对象的值的文本等效项.(1)string p1="xiaomeng";string p2="xiaobei";Response.Write(String.Format("Hello {0},I'm {1}",p1,p1));(2)Response.Write(String.Format("Hello {0},I'm {1}","xi

java基础知识回顾之---java String final类之intern方法

public class StringObjectDemo { /** * @param args */ public static void main(String[] args) { String hello = "Hello", lo = "lo"; System.out.print((hello == "Hello") + " ");//true System.out.print((Other.hello == hel