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

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

最多见的扩展方法是 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 索引器分配的值。
索引器没必要根据整数值进行索引;由你决定如何定义特定的查找机制。
索引器可被重载。
索引器能够有多个形参,例如当访问二维数组时。post

class SampleCollection<T>
{
    private T[] arr = new T[100];  
    /**
     * 索引器在语法上方便您建立客户端应用程序可将其做为数组访问的类、结构或接口。 索引器常常是在主要用于封装内部集合或数组的类型中实现的。
     * 索引器容许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性相似,不一样的是索引器的访问是带参的。
     * 索引器和数组比较:
     * (1)索引器的索引值(Index)类型不受限制
     * (2)索引器容许重载
     * (3)索引器不是一个变量
     * 索引器和属性的不一样点
     * (1)属性以名称来标识,索引器以函数形式标识
     * (2)索引器能够被重载,属性不能够
     * (3)索引器不能声明为static,属性能够
     * 索引器值不属于变量;所以,不能将索引器值做为 ref 或 out 参数进行传递。
     * **/
   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.
 

 

其余的基础功能

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

2. C#高级功能(三)Action、Func,Tuplethis

3. C#高级功能(二)LINQ 和Enumerable类spa

4. C#高级功能(一)Lambda 表达式code

5. C#中泛型的解释(object,list,var,dynamic的区别)htm

6. C#中委托对象

7. C#和.NET版本对比

相关文章
相关标签/搜索