Рейтинг:
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
Пожалуйста, не вмешивайтесь в полномочия свыше :-)
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 или чем-то подобным.
Kornfeld Eliyahu Peter
Спасибо...
(однако, похоже, ОП не уверен в этом)
[no name]
Это близко, но это все еще не дает мне класса. Он получает объект, который может быть приведен к классу, но я не знаю, что это за класс, поэтому я не могу привести к нему.