c#编程
Completion requirements
扩展方法
扩展方法是C# 3.0中新引入的特性,它允许你通过自己的方法扩展现有类型。尽管扩展方法是静态的,但它们的使用方式与被扩展类的正常方法相同。因此,新的功能可以添加到现有类中,而无需修改或重新编译类本身。然而,由于扩展方法并不是类的直接组成部分,扩展方法不能访问类的私有或保护方法、属性或字段。
扩展方法应该在静态类中创建。扩展方法本身应该是静态的,并且至少包含一个参数,第一个参数前面加上 this
关键字:
public static class MyExtensions
{
public static string[] ToStringArray<T>(this List<T> list)
{
string[] array = new string[list.Count];
for (int i = 0; i < list.Count; i++)
array[i] = list[i].ToString();
return array;
}
// 继续...
}
第一个参数的类型(在这个例子中是 List<T>
)指定了扩展方法将可用的类型。现在你可以像这样调用扩展方法:
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
string[] strArray = list.ToStringArray(); // strArray 现在将包含 "1", "2" 和 "3"。
这是程序的其余部分:
using System;
using System.Collections.Generic;
public static class MyExtensions
{
... // 上面的代码继续
public static void WriteToConsole(this string str)
{
Console.WriteLine(str);
}
public static string Repeat(this string str, int times)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < times; i++)
sb.Append(str);
return sb.ToString();
}
}
class ExtensionMethodsDemo
{
static void Main()
{
List<int> myList = new List<int>();
for (int i = 1; i <= 10; i++)
myList.Add(i);
string[] myStringArray = myList.ToStringArray();
foreach (string s in myStringArray)
s.Repeat(4).WriteToConsole(); // string 被 WriteToConsole() 扩展
Console.ReadKey();
}
}
注意,扩展方法可以通过定义多个参数(没有 this
关键字)来接受参数。
Last modified: Sunday, 12 January 2025, 12:10 AM