0

我的基类使用派生类的反射来为它们提供一些功能。目前我这样做:

abstract class BaseClass<T>
{
    string GetClassString()
    {
        // Iterate through derived class, and play with it's properties
        // So I need to know the type of derived class (here T).
        return result;
    }

    static bool TryParse(string classString, out T result)
    {
        // I should declare a variable as T and return it
    }
}

我可以在没有泛型的情况下做到这一点吗?

4

1 回答 1

4

编辑:

抱歉,您需要类型参数(即typeof(T))。在这种情况下,您仍然使用this.GetType(),但您在.GetGenericArguments()[0]之后添加。

尝试解析:您需要创建一个您不知道的类型的新实例

有两种方法:一是不改变其余部分,使用Activator类和以下代码:

result = (T) Activator.CreateInstance(typeof(T))

MSDN)。

然后,您可以为您的类型添加一个“新”约束:

MyClass<T> where T : new() {...}
result = new T();

这两个示例都需要无参数构造函数。如果要传递参数,则需要深入 System.Reflection 内部,获取构造函数列表并调用所需的构造函数。工厂模式也可以完成这项工作。

于 2011-03-01T12:44:49.147 回答