User 13204940 Ответов: 2

Реверсивный метод gettype(для класса MyClass) для класса MyClass


Привет
Допустим, у меня есть класс под названием MyClass.
MyClassType = GetType(MyClass)

Как я могу сделать что-то подобное?

MyClass = TheReverseOfGetType (MyClassType).

- Рикс

Что я уже пробовал:

Часы и множество вопросов безрезультатно

2 Ответов

Рейтинг:
4

User 13204940

Dim type As Type = GetType(MyClass)

Dim obj As Object = type.GetConstructor(Type.EmptyTypes).Invoke(New Object(){})

type.GetMethod("doMethod").Invoke(obj, New Object(){})


F-ES Sitecore

Это ничем не отличается от активатора.CreateInstance, вы все еще создаете экземпляр объекта, поэтому вам действительно следует отметить Решение 1 как решение. Как я уже сказал, Если у вас есть MyClass и это статический метод, то просто напишите

Класса MyClass.doMethod

[no name]

Но в этот момент у меня больше нет MyClass из-за сложности моего кода, у меня есть только тип.

Kornfeld Eliyahu Peter

Но все ваши посты были о том, чтобы получить класс от типа!!!
Итак, теперь вы делаете вариант решения 1 и принимаете его?
Как же так?

Рейтинг:
16

[no name]

Это почти то, что мне нужно, но есть ли способ получить сам класс, а не объект?

Kornfeld Eliyahu Peter

Не совсем понимаю, что вы имеете в виду? Может быть, TypeInfo?
https://msdn.microsoft.com/en-us/library/system.reflection.typeinfo(v=против 110). aspx

[no name]

Дим м как что? = что-то(MyClassType)

F-ES Sitecore

MyClassType

[no name]

Иисус. Мне нужно получить класс из его типа.

Kornfeld Eliyahu Peter

Пожалуйста, не вмешивайтесь в полномочия свыше :-)

0x01AA

:-)

Kornfeld Eliyahu Peter

Это стадия предварительной компиляции кода... как это относится к GetType, CreateInstance и Reflection, что все они являются временем выполнения?
(и кстати-тип класса имеет свойство FullName и Name)

[no name]

Я спрашивал, возможно ли это, и если да, то как обратить GetType (), чтобы получить класс из типа, а не получить тип из класса.

Kornfeld Eliyahu Peter

Похоже, вам совершенно не хватает понимания понятия "класс".
Класс-это определение (вплоть до очень сложного), не более...
Таким образом, получение класса из типа может быть одним из двух:
1. Экземпляр
2. Имя класса
Нет никакого 3-го варианта!

[no name]

Но Активатор.CreateInstance не возвращает класс. Он возвращает объект, который может быть приведен для создания экземпляра класса.

Мне нужно что-то вроде

GetTheClassFrom (MyClassType). doMyStaticMethod()

Kornfeld Eliyahu Peter

Так что теперь ты говоришь о рефлексии...
Поскольку вы создали объект во время выполнения, вы не можете получить доступ к его членам напрямую, а только из отражения (это потому, что для прямого доступа вам нужно знание типа во время компиляции)... То,что вам здесь нужно, - это вызвать...
https://msdn.microsoft.com/en-us/library/a89hcwhh(v=против 110). aspx

F-ES Sitecore

Вы не понимаете, что такое класс и что такое тип. На ваш вопрос был дан ответ, но если это не то, что вам нужно, то вам нужно объяснить, что вы хотите лучше. Повторение" мне нужен класс "несколько раз не приблизит вас к решению, поскольку вам показали, как получить класс, проблема в том, что ваше определение" класса " никто не понимает.

[no name]

Я точно знаю, что такое класс и тип.

Я перефразирую вопрос.

Тусклый класс Как MyClass
класс.doMethod()

Dim type As Type = GetType(MyClass)
& gt; ReverseGetType(тип).doMethod()

Kornfeld Eliyahu Peter

Как я уже объяснял выше, вы смешиваете возможности времени компиляции и времени выполнения, но полностью...
Причина, по которой вы можете написать класс.doMethod () - это потому, что компилятор знает, что такое тип класса... однако ReverseGetType (type) не имеет типа (При типе компиляции), поэтому вы не можете написать эту строку (ошибка компилятора)... Единственный способ сделать это-размышление...

F-ES Sitecore

Если вы хотите вызвать статический метод, у вас уже есть "класс" (тип-это то, что он есть на самом деле, но вы настаиваете на том, чтобы называть его классом).

Класса MyClass.MyStaticMethod()

Нет никакой необходимости возиться с GetType или чем-то подобным.

CPallini

5.

Kornfeld Eliyahu Peter

Спасибо...
(однако, похоже, ОП не уверен в этом)

[no name]

Это близко, но это все еще не дает мне класса. Он получает объект, который может быть приведен к классу, но я не знаю, что это за класс, поэтому я не могу привести к нему.