如何实现类方法可同时作为静态方法和实例方法调用
实现方案
实现逻辑非常简单:新增同名实例方法,内部转发调用原有静态方法,将当前实例作为参数传入即可,完全不需要修改原有静态方法的逻辑。
侵入式实现(修改原类代码)
以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
相关产品推荐
相关产品推荐

