C#中如何获取调用指定方法的对象所属的类名
结论
该需求完全可以实现,无需在所有派生类中重复编写类名打印逻辑,仅在基类MainClass的MainMethod方法中添加少量代码即可达成效果。
实现原理
所有支持多态的面向对象编程语言,都提供了运行时获取实例真实类型的内置能力:当你通过基类引用指向派生类实例时,通过实例自身携带的运行时类型标识,就能准确拿到它实际所属的类,不会因为方法定义在基类就误判为基类类型。
代码示例(以C#为例)
直接在MainMethod中通过this.GetType()获取实例的运行时类型,再读取类型的Name属性即可拿到类名:
public class MainClass { public void MainMethod() { string realClassName = this.GetType().Name; Console.WriteLine($"调用当前方法的实例实际所属类:{realClassName}"); } } // 测试用派生类 public class ChildClass1 : MainClass { } public class ChildClass2 : MainClass { } /* 运行测试: MainClass ins1 = new ChildClass1(); ins1.MainMethod(); // 输出:调用当前方法的实例实际所属类:ChildClass1 MainClass ins2 = new ChildClass2(); ins2.MainMethod(); // 输出:调用当前方法的实例实际所属类:ChildClass2 */
注意事项
- Java环境下将
this.GetType().Name替换为this.getClass().getSimpleName()即可,实现逻辑完全一致 - 不要使用编译期绑定的类型获取写法(比如C#的
typeof(MainClass)、Java的MainClass.class),这类写法永远只能拿到基类类型,无法识别派生类实例。
内容的提问来源于stack exchange,提问作者jujus
相关产品推荐
相关产品推荐

