gpt4 book ai didi

c# - C# 基类可以在静态成员中调用子类的构造函数吗?

转载 作者:行者123 更新时间:2023-11-30 15:35:10 26 4
gpt4 key购买 nike

我有一个抽象泛型类“BaseClass”和一个这样定义的类“SubClass”:

public class SubClass : BaseClass<SubClass>

我想在基类中定义一个具有如下签名的静态方法:

public static T GetSub() 

然后在子类上调用它,以便它返回子类的实例

SubClass sub = SubClass.GetSub();

GetSub 必须调用 SubClass 的默认构造函数,然后返回实例。

这看起来有点疯狂,但我至少很好奇这是否可能。当谈到 C# 更复杂的 OOP 功能时,我是一个新手,所以我真的只是在黑暗中试一试。

最佳答案

这项工作是可行的,但您需要做一些工作。使这项工作最简单的方法是给T new BaseClass 声明中的约束

abstract class BaseClass<T> where T : new() {
public static T GetSub() {
return new T();
}
}

另一种方法是使用 Activator.CreateInstance

abstract class BaseClass<T> {
public static T GetSub() {
return Activator.CreateInstance<T>();
}
}

虽然在功能上这与原始方法略有不同。 CreateInstance<T>方法只会寻找一个无参数的构造函数并调用它。事实上 new T()调用通常会编译为 Activator.CreateInstance<T>称呼。

关于c# - C# 基类可以在静态成员中调用子类的构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15287434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com