C#高级功能(四)扩展方法和索引

扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。
扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。  它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。  仅当你使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。

最常见的扩展方法是 LINQ 标准查询运算符,它将查询功能添加到现有的 System.Collections.IEnumerable
和 System.Collections.Generic.IEnumerable<T> 类型。
若要使用标准查询运算符,请先使用 using System.Linq 指令将它们置于范围中。
在 IEnumerable<T> 类型的实例后键入“.”时,可以在 IntelliSense 语句完成中看到这些附加方法。

int[] ints = { 1, 2, 4,3, 2, 2 };
var result = ints.OrderBy(x=> x);
    public static class MyExtensions
    {
        public static void WordCount(this string str)
        {
            Console.Write(str);
        }
    }  

索引器允许类或结构的实例就像数组一样进行索引。 索引器类似于属性,不同之处在于它们的取值函数采用参数。

索引器概述
使用索引器可以用类似于数组的方式为对象建立索引。
get 取值函数返回值。 set 取值函数分配值。
this 关键字用于定义索引器。
value 关键字用于定义由 set 索引器分配的值。
索引器不必根据整数值进行索引;由你决定如何定义特定的查找机制。
索引器可被重载。
索引器可以有多个形参,例如当访问二维数组时。

class SampleCollection<T>
{
    private T[] arr = new T[100];
    public T this[int i]
    {
        get
        {
            return arr[i];
        }
        set
        {
            arr[i] = value;
        }
    }

public string this[string s] { get { return "Test Return " + s; } }

}

class Program
{
    static void Main(string[] args)
    {
        SampleCollection<string> stringCollection = new SampleCollection<string>();
        stringCollection[0] = "Hello, World";
        System.Console.WriteLine(stringCollection[0]);
        System.Console.WriteLine(stringCollection["Hello,World"]);
} } // Output: //Hello, World.// Hello, World.
 
时间: 2024-10-11 10:14:00

C#高级功能(四)扩展方法和索引的相关文章

开启phpMyAdmin高级功能的设置方法

注:本文基于phpMyAdmin5.5,使用LNMP环境 问题: 登录到phpMyAdmin以后,在主界面的底部,我们发现两条提示信息: 一条提示信息是"phpMyAdmin高级功能尚未完全设置,部分功能未激活.请点击这里查看原因",另外一条信息是"配置文件现在需要一个短语密码." 一旦出现这两条信息,就意味着phpMyAdmin中的部分功能不能使用.解决这个问题的操作步骤分为三部分:上传create_tables.sql文件.配置config.inc.php文件和

C#-this关键字的功能之扩展方法

扩展方法 简介 我们的方法都是与声明他的类的相关联(我们现在写的各个方法都是在类中定义,所以我们调用方法都是用该方法所属类的实体对象调用). 在C#3.0中的扩展方法的特征,允许声明的方法与不是声明该方法的类相关联. 简单实例 下面我们定义了一个Person类,这个类有三个字段,和相应的三个属性 同时有一个方法 IntroductGender(). public class Person { public Person(string name, int age, string gender) {

基于Java的Jess功能函数扩展方法

Jess是Java expert system shell的缩写,是Java平台上的规则引擎,它是CLIPS程序设计语言的超集,是完全使用Java语言编写一种用于开发专家系统的语言.对于基于规则的推理,特别是针对逻辑条件的推理,Jess是已知规则引擎中最快的.它以增强型Rete算法为基础,支持前向推理,也支持后向推理,具有直接对Java对象进行推理,支持对工作存储区的查询访问等特点[1-2]. Jess语言本身提供了很多功能强大的函数供专家系统开发者调用,但这些函数不可能囊括一切功能和运算,若仅

dede织梦_高级功能function扩展-dede @me

为了使用模板标记不破坏文档的可读性,dedecms不像别的模板,有时会使用直接往模板插入PHP或类似PHP的代码,以达到真正的模板与程序分离的特点.但为了让程序有更大的扩展性,dedecms允许对标记使用function 进行扩展,function所使用的函数可以是系统函数,也可以是自定义的函数,只是用在两个方面: 1.模板标记:如:{dede:field name='pubdate' function=GetDateTimeMk('@me')/} 这个标记实际返回的结果是执行了GetDateT

C#的扩展方法解析

在使用面向对象的语言进行项目开发的过程中,较多的会使用到"继承"的特性,但是并非所有的场景都适合使用"继承"特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继承关系实在编译时就定义好了,所以无法在运行时改变从父类继承的实现.子类的实现与它父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化.当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写它或被其他更适合的类替换,这种依赖关系限制

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询

1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法和属性等.Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为.例如,在一个方法前标注[Obsolete]特性,则调用该方法时VS则会提示该方法已过期的警告,如下图: 又如,在.Net Re

windows10系统优化搜索索引的四种方法

很多使用windows10正式版系统的用户,都反馈Windows10索引功能实在占用太多资源了.更加令人苦恼的是,我们又不能将其关闭(会使系统很多功能不能用),这该怎么办呢?其实,我们可以对其进行一些优化,减少其对资源的使用.下面,就随小编看看具体步骤吧! 一:关闭在线搜索 1.微软将Web搜索加入索引功能中,其实就是让必应进行搜索,内容还是需要开启浏览器查看,很鸡肋,在任务栏搜索框的设置中,我们可以将Web搜索关闭: 2.这只是楼主的建议,喜欢的用户当然可以保留. 二:搜索服务延迟启动 1.在

dotnetCore增加MiddleWare的Run,Use Map MapThen四个扩展方法

什么是中间件 中间件是在管道中处理Request请求与Responses响应的一种组件,每种组件可以选择是否让Request进入到下一个组件去处理. 译得不好,大家可以自己看原文Middleware 更详细的还可以参照园中大神的作品: 有汤姆大叔的解读ASP.NET 5 & MVC6系列(6):Middleware详解 artech大神的 ASP.NET Core真实管道详解[1]:中间件是个什么东西? 怎么创建一个Middleware请参考英文文档Middleware 或者 LineZero的