C# 扩展方法允许你在不修改现有类型的源代码的情况下,为该类型添加新的方法。它是一种特殊的静态方法,但可以像实例方法一样调用。扩展方法为现有的类型(包括 .NET 框架中的内置类型、自定义类型等)添加功能提供了一种便捷的方式,同时又不会破坏类型的封装性和原有结构。
- 静态类:扩展方法必须定义在一个静态类中。
- 静态方法:扩展方法本身必须是静态的。
- 第一个参数:扩展方法的第一个参数必须使用
this 关键字,后面紧跟要扩展的类型。
using System;
// 定义一个静态类来包含扩展方法
public static class StringExtensions
{
// 定义一个扩展方法,用于判断字符串是否为回文
public static bool IsPalindrome(this string input)
{
if (string.IsNullOrEmpty(input))
{
return false;
}
int left = 0;
int right = input.Length - 1;
while (left < right)
{
if (input[left] != input[right])
{
return false;
}
left++;
right--;
}
return true;
}
}
class Program
{
static void Main()
{
string testString1 = "radar";
string testString2 = "hello";
// 调用扩展方法
bool isPalindrome1 = testString1.IsPalindrome();
bool isPalindrome2 = testString2.IsPalindrome();
Console.WriteLine($"{testString1} 是否为回文: {isPalindrome1}");
Console.WriteLine($"{testString2} 是否为回文: {isPalindrome2}");
}
}
- 静态类的定义:创建了一个名为
StringExtensions 的静态类,用于存放扩展方法。扩展方法必须定义在静态类中。
- 扩展方法的定义:在
StringExtensions 类中定义了一个名为 IsPalindrome 的静态方法,该方法的第一个参数使用 this 关键字修饰,并且类型为 string,这表明该方法是对 string 类型的扩展。该方法用于判断一个字符串是否为回文。
- 扩展方法的调用:在
Main 方法中,创建了两个字符串变量 testString1 和 testString2,然后像调用实例方法一样直接调用 IsPalindrome 扩展方法,而不需要显式地指定静态类。
通过这种方式,我们可以为现有的类型添加新的功能,而无需修改该类型的原始定义。需要注意的是,扩展方法的优先级低于类型本身定义的实例方法,如果类型本身已经定义了与扩展方法同名的方法,那么扩展方法将不会被调用。