c#扩展方法简单
扩展方法
怎样知道的。
这还得从项目的本身说起。该项目是一套的微软底层架构上搭建起来的。
全部的框架以及控件的封装,数据的传递方法都是总体的框架封装好的。
对经常使用的dropwodnlist控件的数据绑定,这里就有使用的一些扩展方法的封装。怎么曾经没有见过这种方法呢。跟过去才发现是扩展方法。
什么是扩展方法
扩展方法可以向现有类型“加入”方法,而无需创建新的派生类型、又一次编译或以其它方式改动原始类型。
扩展方法是一种特殊的静态方法,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异
怎样编写扩展方法
扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。
它们的第一个參数指定该方法作用于哪个类型。而且该參数以 this
修饰符为前缀。
仅当您使用 using
指令将命名空间显式导入到源码中之后,扩展方法才位于范围中。
看下面样例
using System;
usingSystem.Collections.Generic; using MySpace;//注意:引入扩展方法的空间 namespace Con_1
{
class Program
{
static void Main(string[] args)
{
string str = "{0}先生。 ".With("XuGang");
Console.WriteLine("您好。" + str); //2调用集合的扩展方法
str.ShowItems<char>();
}
}
} namespace MySpace
{
//扩展方法必须在非泛型静态类中定义
public static class MyMethods
{
//注意:第一个參数使用“this”获得当前对象
public static string With(this string_context, params string[] _args)
{
returnstring.Format(_context,_args);
} //2为集合做扩展方法
public static voidShowItems<T>(this IEnumerable<T> _al)
{
foreach (var item in _al)
{
Console.WriteLine(item);
}
}
}
}
从上样例中能够看出
1 C# 仅仅支持扩展方法。不支持扩展属性、扩展事件等;
2 方法名无限制,第一个參数必须带 this;
3 扩展方法的命名空间能够使用namespace System ,但不推荐;
4 定义扩展方法的类是静态类。
详细准则请參考
有关具体信息。请參阅 怎样:实现和调用自己定义扩展方法(C#
编程指南)
小结:
这几天刚到公司,熟悉环境为主要。好些东西他们说了并非立即就能够明确的。
所以还是须要常常问旁边的同事
。用到的方法多是封装好的。所以看到这个认为熟悉可是细致看来。并非。扩展方法再不要的地方还是尽量少用。
避免出现错误。毕竟用的这些方法是平台设计人员几年的功底的。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
c#扩展方法简单的更多相关文章
- 扩展方法 1 简单的string扩展方法
这里是关于 String的简单扩展方法 (静态类 静态方法 this 类型 这里是string) static class Program { static void Main(string[] ar ...
- .NET 简单的扩展方法使用。
写代码时,我们经常会碰到dll中提供的方法,不够用或者不好用的情况.而且我们也不方便去更改dll本身的源码. 这时候我们可以使用.NET提供的"扩展方法"去解决这个问题. 下面我写 ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- 为IEnumerable<T>添加RemoveAll<IEnumerable<T>>扩展方法--高性能篇
最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerab ...
- C#的扩展方法解析
在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继 ...
- ASP.NET MVC学前篇之扩展方法、链式编程
ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...
- 【原创】开源Math.NET基础数学类库使用(12)C#随机数扩展方法
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...
- 【开源】OSharp框架解说系列(3):扩展方法
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
随机推荐
- hdu3360National Treasures (最大匹配,拆点法)
National Treasures Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 《SPA设计与架构》之MV*框架
原文 简书原文:https://www.jianshu.com/p/39f8f0aefdc2 大纲 1.认识MV*框架 2.传统UI设计模式 3.对框架的本质认识——框架有效性和框架分类 4.MV*基 ...
- python高级学习目录
1. Linux介绍.命令1.1. 操作系统(科普章节) 1.2. 操作系统的发展史(科普章节) 1.3. 文件和目录 1.4. Ubuntu 图形界面入门 1.5. Linux 命令的基本使用 1. ...
- 【35.02%】【codeforces 734A】Vladik and flights
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- ios开发多线程四:NSOperation多图下载综合案例
#import "ViewController.h" #import "XMGAPP.h" @interface ViewController () /** t ...
- 基于 Android NDK 的学习之旅-----数据传输(引用数据类型)
接着上篇文章继续讲.主要关于引用类型的数据传输,本文将介绍字符串传输和自定义对象的传输. 1.主要流程 1. String 字符串传输 a) 上层定义一个native的方法,需要一个 ...
- js中 慎用for(var o in arrays) 遍历数组,for(var i,i< objects.length;i++)与for(var i,n = objects.length;i<n;i++) 的性能区别
原文:js中 慎用for(var o in arrays) 遍历数组,for(var i,i< objects.length;i++)与for(var i,n = objects.length; ...
- Expression Blend 的点滴(4)--创建类似iPhone屏幕锁控件(上)
原文:Expression Blend 的点滴(4)--创建类似iPhone屏幕锁控件(上) 本篇文章,最终效果图: 当然,不只是一个UI而已,如果只是一张图片,那专业的设计师能做出更出色的效果.在 ...
- 【u219】最长链
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. [提示] 关 ...
- 【t073】&&【t015】魔法物品
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有两种类型的物品:普通物品和魔法物品.每种普通物品有一个价值P,但每种魔法物品有两种价值:鉴定前的价值 ...