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 }
C#基础知识---扩展方法的更多相关文章
- C# 零散知识 扩展方法 类型约束
今天看到这么一段代码,我看下面调用了NotifyPropertyChanged定义了两个参数,但是调用的时候只写了一个参数.后来查了下,原来这个是扩展方法的用法, 就是说给T扩展了一个方法Notify ...
- C#基础知识之方法重载总结
1.首先解释一下什么是方法重载? 方法重载是指在同一个类中方法同名,参数不同,调用时根据实参的形式,选择与他匹配的方法执行操作的一种技术. 这里所说的参数不同是指以下几种情况: ① 参数的类型 ...
- 多线程基础知识---join方法
join方法的作用 thread.join()方法用于把指定的线程加入到当前线程中,把当前线程的CPU执行时间让给另一个线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继 ...
- python基础知识扩展(一)
python课外笔记 1.print函数 print("helloworld")其实系统默认隐藏了一个参数end,完整的print()语句是 print("hellowo ...
- C#基础知识---匿名方法使用
一.匿名方法使用 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Tex ...
- C#基础知识之扩展方法
扩展方法需要满足的条件: 1.扩展方法必须定义在静态类里. 2.扩展方法必须是静态方法. 3.扩展方法的第一个参数以this修饰符为前缀. 4.扩展方法必须在使用它的类的扩展方法内,否则必须显示的us ...
- js基础知识温习:Javascript中如何模拟私有方法
本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...
- c# 扩展方法奇思妙用基础篇八:Distinct 扩展(转载)
转载地址:http://www.cnblogs.com/ldp615/archive/2011/08/01/distinct-entension.html 刚看了篇文章 <Linq的Distin ...
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
随机推荐
- DNS域名解析四种配置实验 ---Linux DNS域名解析服务
DNS域名解析服务一.BIND域名服务基础1) DNS的定义2)域名结构3)DNS系统的作用① 正向解析:根据域名查找对应的IP地址② 反向解析:根据IP地址查找对应的域名③ DNS系统的分布式数据结 ...
- PYTHON3.4.4 升级pip
python -m pip install --upgrade pipupgrade 前面是两个 "-"
- python 字典添加数据
dzkuaa={}#类似{"张三":2,"李四":3} for i in range(23): ming=bj[i] if dzkuaa.get(ming)== ...
- python -- 程序异常与调试(异常处理)
一.异常处理 针对在运行时可能会出错的语句块,可以提前设计好出现问题后的解决方案, 或者给出相应的提示信息.使用try-except语句来处理Python抛出的异常: # -------------- ...
- Requests方法 -- post
>>> import requests 导入requests库 >>> help(requests) #查看requests方法Help on package ...
- 如何掌握C#的核心技术
如何掌握C#的核心技术 感谢网友毛大神制作的图. 引子 前不久看到一个段子,某年宁波交警引进人脸识别技术抓拍行人闯红灯,结果一天下来被发现闯红灯次数最多的是珠海女子董小姐,日闯红灯3000多次.宁波交 ...
- 【每日算法】存在重复元素 II
题目描述 这是 LeetCode 上的 219. 存在重复元素 II, 难度为 [简单] 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nu ...
- 福昕foxit phantom pdf高级编辑器企业版10.1 pro安装破解教程
本文提供福昕foxit phantom pdf高级编辑器企业版10.1的安装教程.pj教程,可以使用全部功能,注意的是此方法对个人版无效. 没有必要再尝试别的文章,仅看这一篇即可!别的文章亲测是通过修 ...
- jvm源码解读--11 ldc指令的解读
写一个java文件 public static void main(String[] args) { String str1="abc"; String str2 ="a ...
- vue使用GraphVis开发无限拓展的关系图谱
1.去GraphVis官网下载对应的js,新版和旧版的js有所不同,看自己需求引入旧版还是新版(GraphVis官方网址:http://www.graphvis.cn/) visgraph.min.j ...