C#扩展方法定义规则
- 静态类:扩展方法必须定义在一个非泛型的静态类中。
- 静态方法:扩展方法本身必须是静态方法。
- 第一个参数:方法的第一个参数指定了这个扩展方法是为哪个类型扩展的,并且需要使用
this
关键字修饰。
- 命名空间:扩展方法所在的静态类需要位于一个命名空间中,调用时要确保该命名空间被引入。
示例代码
using System;
// 定义静态类
public static class StringExtensions
{
// 定义扩展方法
public static bool IsAllDigits(this string str)
{
foreach (char c in str)
{
if (!char.IsDigit(c))
{
return false;
}
}
return true;
}
}
class Program
{
static void Main()
{
string test1 = "123";
string test2 = "abc";
// 调用扩展方法
bool result1 = test1.IsAllDigits();
bool result2 = test2.IsAllDigits();
Console.WriteLine($"字符串 \"{test1}\" 是否只包含数字字符: {result1}");
Console.WriteLine($"字符串 \"{test2}\" 是否只包含数字字符: {result2}");
}
}
解释
- 定义扩展方法:在
StringExtensions
静态类中定义了 IsAllDigits
静态方法,第一个参数 this string str
表示这是为 string
类型扩展的方法。方法逻辑是遍历字符串中的每个字符,判断是否都是数字字符。
- 调用扩展方法:在
Main
方法中,通过 string
实例 test1
和 test2
直接调用 IsAllDigits
扩展方法,就像调用其自身的实例方法一样。最后输出判断结果。