您的位置:首页 > 编程语言 > C#

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

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

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

int[]ints={1,2,4,3,2,2};
varresult=ints.OrderBy(x=>x);


publicstaticclassMyExtensions
{
publicstaticvoidWordCount(thisstringstr)
{
Console.Write(str);
}
}


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

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

classSampleCollection<T>
{
privateT[]arr=newT[100];

/**
*索引器在语法上方便您创建客户端应用程序可将其作为数组访问的类、结构或接口。索引器经常是在主要用于封装内部集合或数组的类型中实现的。
*索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。
*索引器和数组比较:
*(1)索引器的索引值(Index)类型不受限制
*(2)索引器允许重载
*(3)索引器不是一个变量
*索引器和属性的不同点
*(1)属性以名称来标识,索引器以函数形式标识
*(2)索引器可以被重载,属性不可以
*(3)索引器不能声明为static,属性可以
*索引器值不属于变量;因此,不能将索引器值作为ref或out参数进行传递。
***/

publicTthis[inti]{get{returnarr[i];}set{arr[i]=value;}}

publicstringthis[strings]{get{return"TestReturn"+s;}}
}

classProgram
{
staticvoidMain(string[]args)
{
SampleCollection<string>stringCollection=newSampleCollection<string>();
stringCollection[0]="Hello,World";
System.Console.WriteLine(stringCollection[0]);

System.Console.WriteLine(stringCollection["Hello,World"]);

}}
//Output:
//Hello,World.
//Hello,World.


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: