You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在FadeableGroup子类中调用扩展方法需加this关键字?

为什么在子类中调用父类的扩展方法必须显式使用this关键字?

你定义的扩展方法代码如下:

public static class MyUtility
{
    public static void StartFadingIn(this FadeableGroup fadeableGroup, float duration)
    {
        // do something
    }
}

在子类MyClass中调用时,只有加this才能被编译器识别:

namespace MyNamespace
{
    public class MyClass : FadeableGroup
    {
        private void Test()
        {
            this.StartFadingIn(1); // 正常识别
            // StartFadingIn(1); // 编译器无法识别
        }
    }
}

原因解析

  • 扩展方法本质是静态方法的语法糖,编译器不会真的把它添加到目标类的实例方法集合里。
  • 在类的非静态方法里直接写StartFadingIn(1)时,编译器的查找逻辑是优先匹配当前类的静态方法、当前命名空间或已导入命名空间下的静态方法,不会默认把当前实例(this)作为调用者去匹配扩展方法。
  • 只有显式加上this.,编译器才会明确以当前实例为调用者,先检查该实例的类型(包括父类FadeableGroup)是否有对应的实例方法,当找不到匹配的实例方法时,才会去查找针对该类型定义的扩展方法,最终匹配到你写的StartFadingIn。

内容的提问来源于stack exchange,提问作者Tudvari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:53:32