C# 扩展方法是一种特殊的静态方法,可以为现有的类类型(包括基元类型、引用类型、结构类型和枚举类型等)添加额外的方法,而无需创建派生类或使用继承。扩展方法的使用使得我们可以为系统自带的类型添加自定义的方法,也可以对外部封装的类型进行方法扩展以实现特定的功能。下面是使用C#扩展方法的完整攻略,包含以下几个步骤:
1. 创建静态类
为了定义扩展方法,我们需要创建静态类。静态类可以不用实例化即可使用其中的方法。示例如下:
public static class MyExtensions
{
// 扩展方法定义
}
2. 添加扩展方法
扩展方法定义的格式比较特殊,需要满足以下要求:
- 必须是静态类的静态方法。
- 第一个参数用关键字this修饰,表示该扩展方法可以为类型T的实例执行。
- 参数列表中至少有一个参数(除第一个参数之外),表示扩展方法的参数。
以下是示例代码:
public static class MyExtensions
{
public static int WordCount(this string str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
上面的代码为string类型添加了一个扩展方法WordCount,用于返回字符串中的单词个数。
3. 调用扩展方法
调用扩展方法与普通静态方法的调用方式是相同的,但是使用扩展方法时需要注意以下几点:
- 扩展方法必须在使用前被定义。
- 调用扩展方法时,实例作为第一个参数传递给该方法。
以下是示例代码:
string str = "There is no spoon.";
int wordCount = str.WordCount();
Console.WriteLine(wordCount); // 输出 4
上面的代码中,我们定义了一个字符串str,并调用了str的扩展方法WordCount,返回字符串中的单词个数。
例子
以下是另外一个例子,为List
public static class MyExtensions
{
public static Dictionary<TKey, int> GroupByCount<TSource, TKey>
(this List<TSource> list, Func<TSource, TKey> keySelector)
{
Dictionary<TKey, int> result = new Dictionary<TKey, int>();
foreach (var item in list)
{
TKey key = keySelector(item);
if (result.ContainsKey(key))
{
result[key]++;
}
else
{
result[key] = 1;
}
}
return result;
}
}
上面的代码中,我们为List
List<int> list = new List<int> { 1, 2, 2, 3, 3, 3 };
var result = list.GroupByCount(i => i);
foreach (var item in result)
{
Console.WriteLine($"{item.Key}: {item.Value}"); // 输出 1: 1, 2: 2, 3: 3
}
上面的代码中,我们创建了一个List
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 扩展方法的使用 - Python技术站