如何从基类静态方法中静态获取继承类的类型?
解决静态基类获取继承类类型的方案
在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
相关产品推荐
相关产品推荐

