1

我的班级中有“类型”类型的变量:

class A
{
    public static Type MyType;
}

我用anywhere构造声明了这个变量。例子:

A.MyType = b.GetType();

第一个问题:我需要声明具有存储在 MyType 中的类型的新变量。

<MyType> myValue = new <MyType>;

第二个问题:我需要一个函数来指示“类型”的变量是否可以相互简化。

4

1 回答 1

6

第一个问题:我需要声明具有存储在 MyType 中的类型的新变量。

你不能这样做,基本上。

变量类型需要在编译时知道。您不能使用仅在执行时才知道的类型来声明变量。您可以使用泛型获得一些方法:

public class Foo<T>
{
    private T value;
}

你甚至可以添加一个约束来要求它T有一个无参数的构造函数,然后你可以调用它:

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

Foo<T>...当您只知道T在执行时使用反射的类型时,您可以创建一个:

Type genericDefinition = typeof(Foo<>);
Type constructed = genericDefinition.MakeGenericType(A.MyType);
object instance = Activator.CreateInstance(constructed);

...但它会很快变得混乱。您还没有告诉我们您实际想要达到的目标,因此很难提出替代方案 - 但如果您可以重新设计以避免这种情况,我会的。

第二个问题:我需要一个函数来指示“类型”的变量是否可以相互简化

您可能正在寻找Type.IsAssignableFrom,但不清楚...

于 2013-02-21T08:37:12.623 回答