如何在C#中执行“Class <! - ?extends MyClass - >”之类的操作

时间:2012-03-02 13:38:08

标签: c# java reflection

我需要在C#中使用反射,我知道它有一个Type对象,可以像Java Class一样使用反射,但我需要指定一个类型或子类型,如Java代码下面:

public class Test{

    class Test2 extends Test { }        

    public static void doSomething(Class<? extends Test> myClass){
        //doSomething with class...
    }

    public static void main(String[] args){
        doSomething(Test2.class); //ok
        doSomething(String.class); //error
    }

}

2 个答案:

答案 0 :(得分:3)

在.NET框架中,Type不是通用的。只有一种类型。你不能具体说明你只需要一个描述从给定类型派生的类型的Type,至少不是静态的。

你当然可以

public class Test
{
    public void DoSomething(Type myClass)
    {
        if(!typeof(Test).IsAssignableFrom(myClass))
        {
            throw new ArgumentException("myClass must refer to Test or a derived class", "myClass");
        }
    }
}

答案 1 :(得分:1)

也许您想要对类型参数进行约束?

public class Student<T> where T : Person

http://msdn.microsoft.com/en-us/library/d5x73970.aspx