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基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
随机推荐
- 【论文阅读】Motion Planning through policy search
想着CSDN还是不适合做论文类的笔记,那里就当做技术/系统笔记区,博客园就专心搞看论文的笔记和一些想法好了,[]以后中框号中间的都算作是自己的内心OS 有时候可能是问题,有时候可能是自问自答,毕竟是笔 ...
- WSL2:Windows 亲生的 Linux 子系统
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- P5110 块速递推-光速幂、斐波那契数列通项
P5110 块速递推 题意 多次询问,求数列 \[a_i=\begin{cases}233a_{i-1}+666a_{i-2} & i>1\\ 0 & i=0\\ 1 & ...
- Redis挂了,流量把数据库也打挂了,怎么办?
你好呀,我是歪歪. 是这样的,前几天有个读者给我发消息,说面试的时候遇到一个场景题: 他说他当时,一时间竟然找不到回答问题的角度,感觉自己没有回答到点子上. 我仔细想了一下,确实是感到这个问题有一丝丝 ...
- 大数据学习(23)—— ZooKeeper实战
本片介绍两方面内容,一方面是命令行操作,另一方面是Java调用API. ZooKeeper集群环境的搭建在Hadoop集群搭建里已经讲过了,这里不再赘述,本篇内容基于zk3.5.8. 这里补充一点,除 ...
- charles抓取https设置
第一步:打开charles,查看电脑ip,手机设置代理(需要手机和电脑在同一网络) 手机下载证书不要用自带的下,会失败 1.查看电脑ip 2.手机设置代理,修改网络,保存 3.手机访问"看图 ...
- vue传值 ---- >> 子传父,$emit()
划重点: $emit 绑定一个自定义事件event,当这个这个语句被执行到的时候,就会将参数arg传递给父组件,父组件通过@event监听并接收参数. 子组件: 1 <template& ...
- .net 知新:【4】NuGet简介和使用
在包管理以前我们在项目中引用第三方包通常是去下载dll放到项目中再引用,后来逐渐发展成各种包管理工具,nuget就是一种工具,适用于任何现代开发平台的基本工具可充当一种机制,通过这种机制,开发人员可以 ...
- MIPS汇编学习
MIPS汇编学习 mips汇编不同于x86汇编,属于精简指令集,常见于路由器等一些嵌入式设备中. mips汇编没有对堆栈的直接操作,也就是没有push和pop指令,mips汇编中保留了32个通用寄存器 ...
- xubuntu下制作自定义的ISO文件
by han; 1.打开命令编辑器,建立文件 # sudo su # mkdir -p /opt/custom_conf/user_custom_conf/config 2.将自定义的设置复制保存到/ ...