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

如何从基类静态方法中静态获取继承类的类型?

解决静态基类获取继承类类型的方案

在C#中,静态成员属于定义它的类本身,子类不会继承或覆盖基类的静态成员。要实现基类静态成员能获取子类类型,最实用的方案是使用泛型基类,让子类继承时传入自身类型作为泛型参数。

示例代码

using System;

public class BaseClass<T> where T : BaseClass<T>
{
    public static Type TypeOfThis => typeof(T);
    public static void HelloWorld() => Console.WriteLine($"Hello world, I am {TypeOfThis.Name}");
}

public class InheritingClass : BaseClass<InheritingClass> { }

测试效果

调用子类的静态方法:

InheritingClass.HelloWorld();

输出结果:

Hello world, I am InheritingClass

方案说明

  • 泛型约束where T : BaseClass<T>确保传入的泛型参数必须是当前基类的子类,避免传入无关类型导致错误。
  • 基类通过typeof(T)直接获取子类类型,完美适配静态场景无需实例的要求。

替代方案(不推荐)

如果不想使用泛型,也可以让每个子类重新定义静态成员并实现对应逻辑,但这种方式会产生大量重复代码,维护成本高,仅适合简单场景:

public class BaseClass
{
    public virtual static Type TypeOfThis => typeof(BaseClass);
    public static void HelloWorld() => Console.WriteLine($"Hello world, I am {TypeOfThis.Name}");
}

public class InheritingClass : BaseClass
{
    public new static Type TypeOfThis => typeof(InheritingClass);
}

内容的提问来源于stack exchange,提问作者Statharas.903

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:05:48