C# 扩展方法一
1. 何为扩展方法
扩展方法是C#3.0引入的语法特性,是一种特殊的静态方法。它使得我们能向现有的数据类型“动态”添加方法,而不需要创建行的派生类型、重新编译或直接修改原始类型的源代码。
注意扩展方法的要点:
1). 扩展方法必须是静态的,并且要在一个非泛型的静态类中。
2). 扩展方法第一个参数前必须有一个this关键字,它指明扩展方法将“附加于”哪个类型的对象上。
2. 扩展方法与原始类型同名时,扩展方法永远不会被调用 eg:Tostring
namespace ConsoleApp5
{
public static class AV
{
public static string ToString<T>(this List<T> list)
{
var result = new StringBuilder();
foreach (var length in list)
result.Append(length);
return result.ToString();
}
} internal class Program
{
private static void Main(string[] args)
{
var list = new List<int> {, , };
Console.WriteLine(list.ToString());
Console.Read();
}
}
}
要想生效可以把toString 修改为toString1
namespace ConsoleApp5
{
public static class AV
{
public static string ToString1<T>(this List<T> list)
{
var result = new StringBuilder();
foreach (var length in list)
result.Append(length);
return result.ToString();
}
} internal class Program
{
private static void Main(string[] args)
{
var list = new List<int> {, , };
Console.WriteLine(list.ToString1());
Console.Read();
}
}
}
object中虚方法,在它的子类中不覆盖那就只能调用父类的虚方法
public virtual string ToString()
{
return this.GetType().ToString();
}
重新写一个数据结构才能够使用override 比如public struct DateTime中的tostring
public struct Data
{
private double value;
public Data(double value){this.value = value;}
public override string ToString()
{
return Math.Round(this.value, , MidpointRounding.AwayFromZero).ToString("0.00");
}
public static Data operator +(Data data1, Data data2)
{
double d = data1.value + data2.value;
return new Data(d);
}
}
比如实体类中Tostring
public class People
{
private List<People> friends = new List<People>(); public int Id { get; set; }
public string Name { get; set; }
public DateTime Brithday { get; set; }
public People Son { get; set; }
public People[] Friends { get { return friends.ToArray(); } } public void AddFriend(People newFriend)
{
if (friends.Contains(newFriend)) throw new ArgumentNullException("newFriend", "该朋友已添加");
else friends.Add(newFriend);
}
public override string ToString()
{
return string.Format("Id: {0}, Name: {1}", Id, Name);
} }
3. 扩展方法的泛型版本
static class MyExtensionMethods
{
public static void Test<T>(this T obj)
{
Console.WriteLine(obj.ToString());
}
}
在调用扩展方法时可以可以不指定泛型类型参数的具体类型。DateTime.Now.Test();但是在实际开发中,需要给出明确的参数类型。以免影响代码的可读性、
4. 目的
提升代码的可读性,避免写一些重复性的代码了,不然有写代码写很多遍,自己救回很烦;
C# 扩展方法一的更多相关文章
- JBOSS通过Apache负载均衡方法一:使用mod_jk
JBOSS通过Apache负载均衡方法一:使用mod_jk 本文第一.二节分别对Linux环境下前端使用Apache以及windows环境下前端使用IIS通过AJP协议和后端的JBOSS通信实现负 ...
- Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->使用spring framework的IoC容器功能----->方法一:使用XML文件定义beans之间的依赖注入关系
XML-based configuration metadata(使用XML文件定义beans之间的依赖注入关系) 第一部分 编程思路概述 step1,在XML文件中定义各个bean之间的依赖关系. ...
- 【转载】.NET(C#): Task.Unwrap扩展方法和async Lambda
.NET(C#): Task.Unwrap扩展方法和async Lambda 目录 Task.Unwrap基本使用 Task.Factory.StartNew和Task.Run的Unwrap操作 使用 ...
- centos6.5下oracle11g开机自动启动方法一
转裁于 方法一 https://blog.csdn.net/wx5040257/article/details/77875690 方法二 https://blog.csdn.net/wx504025 ...
- mybatis由浅入深day02_2一对一查询_2.2方法一:resultType
2 一对一查询 2.1 需求(查询所有订单信息,关联查询创建订单的用户信息) 查询所有订单信息,关联查询创建订单的用户信息 注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用 ...
- 头像文件上传 方法一:from表单 方法二:ajax
方法一:from表单 html 设置form表单,内包含头像预览div,内包含上传文件input 设置iframe用来调用函数传参路径 <!--表单提交成功后不跳转处理页面,而是将处理数据返回给 ...
- vue抽取公共方法———方法一
方法一:Vue插件 1.概述 作用:满足vue之外的需求,特定场景的需求 比如说,让你在每个单页面组件里,都可以调用某个方法(公共方法),或者共享某个变量等 2.使用方法 [声明插件]- [写插件]- ...
- 扩展方法和Enumerable
.NET中扩展方法和Enumerable(System.Linq) LINQ是我最喜欢的功能之一,程序中到处是data.Where(x=x>5).Select(x)等等的代码,她使代码看起来更好 ...
- LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作. 这就可以使用线程来实现. ...
随机推荐
- [C#学习笔记]你真的理解拆箱装箱吗?
学习一项新知识的时候,最好的方法就是去实践它. 前言 <CLR via C#>这本神书真的是太有意思了!没错我的前言就是这个. 装箱 首先来看下,下面这段代码 可以看到,每次循环迭代都会初 ...
- soundPool的使用
SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); HashMap<Integer, Integer& ...
- java 实验5 图形用户界面设计试验
常用布局 1).流布局: FlowLayout 从左到右,自上而下方式在容器中排列,控件的大小不会随容器大小变化. 容器.setLayout(new FlowLayout(FlowLayout.LEF ...
- 挂载U盘到linux中
一. 挂载U盘到linux中,也可以是虚拟机中的linux 1. 首先插上U盘 2. fdisk -l 找到自己的U盘设备,并且记住文件系统类型,主要看空间大小来判断,比如是/dev/sdc ...
- JavaBean简介及使用
JavaBean简介及使用 望星空 https://blog.csdn.net/joywy/article/details/7773503 一.JavaBean简介 JavaBean是使用Jav ...
- java简单工厂设计模式
一.基本定义 /* *简单工厂设计模式: *文字描述理解: * 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式. * 通过专门定义一个类来负责创建其它类的实例,被创建的实例通常 * 都具有共同 ...
- 学习react教程
网址收藏: React官网,React的Github,React的中文文档 1.react是什么? React起源于Facebook的内部项目,因为该公司对市场上所有的Javascript MVC框架 ...
- jquery scrollTop()与scrollLeft()
1.scrollLeft() scrollLeft() 方法设置或返回被选元素的水平滚动条位置. 提示:当滚动条位于最左侧时,位置是 0. 当用于返回位置时:该方法返回第一个匹配元素的滚动条的水平位置 ...
- [转] 如何在 CentOS7 中使用阿里云的yum源
[From] https://www.cnblogs.com/lpbottle/p/7875400.html 1. 备份原来的yum源 mv /etc/yum.repos.d/CentOS-Base. ...
- Maven 安装jar文件到本地repository
Reference: https://maven.apache.org/general.html#importing-jars mvn install:install-file \ -Dfile=&l ...