在这篇文章里会实现一个简单的实例,通过这个实例,希望大家能对扩展方法有一个初步的认识,仅此而已。
1.完成静态类SortHelper,该类仅仅具有一个静态方法SortInput,使用该方法可以对整型数组进行冒泡排序。
using System.Collections.Generic;
namespace ExtentionFunction
{
public static class SortHelper
{
public static List<int> SortInput(List<int> inputList)
{
int temp;
for (int i = 0; i < inputList.Count - 1; i++)
{
for (int j = 0; j < inputList.Count - 1-i; j++)
{
if (inputList[j] > inputList[j+1])
{
temp = inputList[j];
inputList[j] = inputList[j + 1];
inputList[j + 1] = temp;
}
}
}
return inputList;
}
}
}
2.在Main函数中调用该排序方法对数组进行冒泡排序。
using System;
using System.Collections.Generic;
namespace ExtentionFunction
{
class Program
{
static void Main(string[] args)
{
List<int> sortList = new List<int>();
sortList.Add(2);
sortList.Add(1);
sortList.Add(4);
sortList.Add(3);
sortList.Add(5);
Console.WriteLine("排序前的数组为:");
foreach (int t in sortList)
{
Console.WriteLine(t);
}
sortList = SortHelper.Sort(sortList);
Console.WriteLine("排序后的数组为:");
foreach (int t in sortList)
{
Console.WriteLine(t);
}
}
}
}
执行结果如下:
3.接下来,我们对静态类SortHelper的静态方法SortInput做一个简单的改动。
using System.Collections.Generic;
namespace ExtentionFunction
{
public static class SortHelper
{
public static List<int> SortInput(this List<int> inputList)
{
int temp;
for (int i = 0; i < inputList.Count - 1; i++)
{
for (int j = 0; j < inputList.Count - 1-i; j++)
{
if (inputList[j] > inputList[j+1])
{
temp = inputList[j];
inputList[j] = inputList[j + 1];
inputList[j + 1] = temp;
}
}
}
return inputList;
}
}
}
这时,请大家睁大自己的双眼,仔细辨别,发现只是在静态方法SortInput的参数前加入了this关键字。这样一来,我们的静态方法SortInput就变成了扩展方法。在Visual Studio中将鼠标对准该方法的方法调用,即可显示该方法是否为扩展方法。如下图,该方法就被识别为“扩展”。
我们可以去掉关键字this后,再将鼠标对准该方法的方法调用,发现,“扩展”标记消失了(如下图)。
4.相应的,我们修改一下Main函数的函数调用代码。此时方法的调用代码变为"sortList = sortList.SortInput();"。
using System;
using System.Collections.Generic;
namespace ExtentionFunction
{
class Program
{
static void Main(string[] args)
{
List<int> sortList = new List<int>();
sortList.Add(2);
sortList.Add(1);
sortList.Add(4);
sortList.Add(3);
sortList.Add(5);
Console.WriteLine("排序前的数组为:");
foreach (int t in sortList)
{
Console.WriteLine(t);
}
sortList = sortList.SortInput();
Console.WriteLine("排序后的数组为:");
foreach (int t in sortList)
{
Console.WriteLine(t);
}
}
}
}
再次执行程序,结果如下:
与前次结果相同。
通过这个小实例,让我们简单的了解了扩展方法的应用。
扩展方法到底是什么?他跟普通的实例方法又有什么区别?什么样的方法可以申明为扩展方法?在这里并没有进行任何说明。
在下一篇文章中,会对这些一一进行解答。