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

如何实现类方法可同时作为静态方法和实例方法调用

实现方案

实现逻辑非常简单:新增同名实例方法,内部转发调用原有静态方法,将当前实例作为参数传入即可,完全不需要修改原有静态方法的逻辑。

侵入式实现(修改原类代码)

以C#为例,原有代码如下:

public class Foo
{
    // 原有静态方法
    public static void Bar(Foo instance)
    {
        // 原有业务逻辑
        Console.WriteLine($"处理实例:{instance.GetHashCode()}");
    }
}

新增实例方法后的代码:

public class Foo
{
    // 原有静态方法完全不变
    public static void Bar(Foo instance)
    {
        Console.WriteLine($"处理实例:{instance.GetHashCode()}");
    }

    // 新增同名实例方法
    public void Bar()
    {
        // 直接转发调用静态方法,传入当前实例
        Foo.Bar(this);
    }
}

两种调用方式都可以正常运行:

// 原有类调用方式
Foo.Bar(new Foo());
// 新增实例调用方式
new Foo().Bar();

非侵入式实现(适合测试场景,不修改原类代码)

如果是测试场景不想修改原有业务代码,可通过语言特性实现无侵入扩展:

C# 扩展方法方案

// 单独的扩展类,不用修改原有Foo类的代码
public static class FooTestExtensions
{
    public static void Bar(this Foo instance)
    {
        Foo.Bar(instance);
    }
}

JavaScript 原型扩展方案

// 不用修改原有Foo类的代码
Foo.prototype.Bar = function() {
    Foo.Bar(this);
}

内容的提问来源于stack exchange,提问作者just-a-hriday

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 01:12:03