Как сделать что-то вроде «Класс»"в C # - PullRequest
1 голос
/ 02 марта 2012

Мне нужно использовать отражение в C #, и я знаю, что у него есть объект Type, который позволяет вам работать с отражением, как Class в Java, но мне нужно указать тип или подтипы, такие как код 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 ]

3 голосов
/ 02 марта 2012

В .NET Framework 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 голос
/ 02 марта 2012

Может быть, вы хотите ограничения на параметры типа?

public class Student<T> where T : Person

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...