C# 扩展方法定义方法 C#如何创建自己的扩展方法-C#.Net教程

扩展方法必须定义在静态类中,且方法本身为static,首参数用this修饰目标类型,需通过using引入命名空间才能调用。

扩展方法必须定义在静态类中

扩展方法本质是编译器特性,不是真正的“给类型加方法”,所以 C# 强制要求:所有扩展方法必须声明在 static 类里,且方法本身也必须是 static。如果漏掉任一 static,编译器会报错 CS1106: Extension method must be defined in a non-generic static class。

  • 类名可以任意,比如 StringExtensions、EnumerableHelpers,但必须加 static 修饰符
  • 方法第一个参数用 this 修饰,类型即为要扩展的目标类型(如 this string s 表示扩展 string)
  • 不能是泛型类的嵌套类型(例如 MyClass.Extensions 不合法)

扩展方法的第一个参数必须带 this 修饰符

this 是扩展方法的语法标记,不是可选的。它告诉编译器“这个方法将作为目标类型的实例方法被调用”。没有 this,就是普通静态方法,无法用点号链式调用。

public static class DateTimeExtensions
{
    // ✅ 正确:this DateTime dt 表示扩展 DateTime 类型
    public static string ToShortChineseDate(this DateTime dt)
    {
        return $"{dt.Year}年{dt.Month}月{dt.Day}日";
    }
// ❌ 错误:缺少 this,编译通过但无法作为扩展方法使用
public static string ToShortChineseDate(DateTime dt) { ... }

}

  • this 参数类型可以是具体类型(string)、接口(IEnumerable)、委托或泛型约束类型
  • 不能是 dynamic 或指针类型(如 int*)
  • 扩展 Nullable(如 int?)时,写成 this int? value 即可,无需特殊处理

扩展方法的调用依赖 using 指令和作用域可见性

即使定义了扩展方法,如果当前文件没引入对应命名空间,或者方法所在类不可见(比如 internal 类在另一个程序集),IDE 就不会显示智能提示,调用也会失败,报错 CS1061: 'xxx' does not contain a definition for 'yyy'。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » C# 扩展方法定义方法 C#如何创建自己的扩展方法-C#.Net教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4008987+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4008987+
  • 本周更新: 0+
  • 最后更新: 2026-03-16