Страница: 1 |
Страница: 1 |
Вопрос: Как создать новый экземпляр объекта, если его ....
Добавлено: 01.07.05 11:56
Автор вопроса: Ваня | Web-сайт:
Как создать новый экземпляр объекта, если его тип будет известен только в процессе выполнения кода?
Вот, например, есть Dim Obj1 as New Button
А что делать, если заранее не известно, что это будет именно Button?
.....
aType = GetType(System.Windows.Forms.Button)
.....
Dim Obj1 as New ??? ' Нужно, чтобы у Obj1 был тип, который хранится в aType!!!
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 01.07.05 12:13
Тебе Reflection нужен.
Кури MSDN на предмет System.Reflection.
Только ты точно понимаешь, что ты получишь в результате?
Тебе нужно будет или через кучу CType'ов прибираться, или через Invoke...
Лучше опиши, что именно ты хочешь сделать.
Номер ответа: 2
Автор ответа:
Ваня
ICQ: 193909609
Вопросов: 4
Ответов: 14
Web-сайт:
Профиль | | #2
Добавлено: 01.07.05 12:40
Вот так нет проблем:
Public Overridable Function method() As Integer
Return 0
End Function
End Class
Public Class B
Public Overridable Function method() As Integer
Return 1
End Function
End Class
Class Mymethodinfo
Public Shared Function Main() As Integer
Console.WriteLine("Reflection.MethodInfo"
Console.WriteLine()
Dim MyA As New A()
Dim MyB As New B()
'Get the Type and MethodInfo
Dim MyTypea As Type = MyA.GetType
Dim Mymethodinfoa As MethodInfo = MyTypea.GetMethod("method"
Dim MyTypeb As Type = MyB.GetType
Dim Mymethodinfob As MethodInfo = MyTypeb.GetMethod("method"
'Get and display the Invoke method
Console.WriteLine(MyTypea.FullName, _
Mymethodinfoa.Invoke(MyA, Nothing).ToString())
Console.WriteLine (MyTypeb.FullName, _
Mymethodinfob.Invoke(MyB, Nothing).ToString())
Return 0
End Function
End Class
А вот, если я не знаю заранее тип MyB и MyA (они находятся в другом приложении), но знаю, что Function method там есть. Как в таком случае сделать чтобы Mymethodinfoa.Invoke(MyA, Nothing).ToString()) работал?
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 01.07.05 13:01
Погоди, а сам тип ты откуда берешь?
Да и вообще, лучше бы ты описал все как надо, а не абстрактно.
Очень возможно, что тебе тут подойдут интерфейсы.
Номер ответа: 4
Автор ответа:
Ваня
ICQ: 193909609
Вопросов: 4
Ответов: 14
Web-сайт:
Профиль | | #4
Добавлено: 01.07.05 20:05
Типы вот как получаю:
App = System.Reflection.Assembly.LoadFrom(FileName)
Dim aTypes() As Type = App.GetTypes
Dim Obj1 as New ??? 'один из типов в aTypes()
Dim P() as Object
P=App.EntryPoint.GetParameters'???
App.EntryPoint.Invoke(Obj1, P)
Главная цель запустить App.EntryPoint.Invoke
Номер ответа: 5
Автор ответа:
Ваня
ICQ: 193909609
Вопросов: 4
Ответов: 14
Web-сайт:
Профиль | | #5
Добавлено: 01.07.05 20:10
Что такое интерфейсы?
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 01.07.05 21:20
> Что такое интерфейсы?
В двух словах объяснить трудно, это важная вещь ООП.
Кажется, у Эпплмана было описание этого всего.
Также советую посмотреть второе или третье впечатление Гриенко Виталия на
vbnet.ru - в разделе Статьи. Там тоже должно быть что-то на эту тему.
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 01.07.05 21:20
Assembly.CreateInstance