gpt4 book ai didi

c# - C#如何做运行时泛型?

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:14 25 4
gpt4 key购买 nike

Java 让我恼火的一件事是泛型类型参数的编译时翻译的糟糕实现。

我可以观察并理解 C# 实现要好得多,但我对它的工作原理感到困惑。

本质上,你怎么能说:

T t = new T()

如果您不知道 T 的类型,因此不知道构造函数参数要求?

我可以看到
Class<T> cl = T.class

或者
T[] tarr = new T[0]

但是如果您不知道构建它的要求,我看不出如何真正创建 T 的新实例?

最佳答案

你只能做new T();如果 T 被限制为有一个普通的、无参数的公共(public)构造函数,例如:

public class Foo<T> where T : new() {
private myT = new T();
}

此外,无法指定是否存在任何其他类型的构造函数。这不可能:
// Doesn't work
public class Foo<T> where T : new(String, Int) {
private myT = new T("Foo", 5);
}

对于您的其他观点,这是您在运行时获取 T 类型的方式:
var tType = typeof(T);

并创建 T 的数组实际上并不创建任何实例(除非 T 是值类型,在这种情况下它会创建该类型的默认值):
// Space for 32 T's, but nothing in the array.
// If T is a value type, like an int for instance,
// each one would have the default value (0 for int, for example)
var arrayOfT = new T[32];

关于c# - C#如何做运行时泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10886577/

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