Страница: 1 |
Есть описание класса в файлике, файликов много, и где лежат - непонятно.. Необходимо во время работы проги считывать описание класса и создавать объект этого класса. Пробовала использовать CreateObject, но вылазит ошибка "невозможно создать ActiveX компонент". Помогите плиз...
Dim А как должна "строка имя моего типа" выглядеть? Если у меня сборка с именем "MyAssambly", пространство имен в ней "SampleNS", а имя класса "Sample". Если брать строку "SampleNS.Sample", то тип MyType оказывается nothing... ЗЫ: а может я просто совсем я совсем тупая, а?... Не работает... Все равно MyType = Nothing, а дальше соответственно ошибка "Value cannot be null" Файл сборки MyAssambly: Imports Microsoft.VisualBasic.Interaction Namespace SampleNS Public Class Sample Public Sub PrintMe(ByVal strin As String) MsgBox(strin,1) End Sub End Class End Namespace Код программы: Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim strin As Object strin = "MyAssambly.SampleNS.Sample" Dim MyType As Type = Type.GetType(strin) Dim obnew As Object = Activator.CreateInstance(MyType) obnew.PrintMe("Hello") End Sub End Class ЗЫ: да, замечательно вся структуризации пропала... Надеюсь понятно? ЗЗЫ опс, строку с кнопкой в одном месте исправить забыла, там Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Плохо, что в форуме нет возможности редактировать свои же сообщения Так все работает. Имя solution - Sample, далее по коду... Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim MyType As Type = Type.GetType("Sample.test.mytest") Dim Obj As Object = Activator.CreateInstance(MyType) Obj.printstr("!!!") End Sub End Class Namespace test Public Class mytest Public Sub PrintStr(ByVal str As String) MsgBox(str) End Sub Страница: 1 |
Вопрос: Как создать объект в VB.Net?
Добавлено: 10.02.04 18:16
Автор вопроса: Unica
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #1
Добавлено: 10.02.04 18:35
может reflection поюзать?
Номер ответа: 2
Автор ответа:
Павло
Вопросов: 8
Ответов: 24
Профиль | | #2
Добавлено: 10.02.04 19:52
Номер ответа: 3
Автор ответа:
Павло
Вопросов: 8
Ответов: 24
Профиль | | #3
Добавлено: 10.02.04 19:54
P.S. Правда, это работает если объект входит в сборку. Иначе, имхо более сложную конструкцию через Reflection юзать надо.
Номер ответа: 4
Автор ответа:
Unica
Вопросов: 2
Ответов: 6
Профиль | | #4
Добавлено: 10.02.04 21:01
Номер ответа: 5
Автор ответа:
Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #5
Добавлено: 10.02.04 21:12
нужно брать:
MyAssambly.SampleNS.Sample
Номер ответа: 6
Автор ответа:
Unica
Вопросов: 2
Ответов: 6
Профиль | | #6
Добавлено: 10.02.04 21:21
Номер ответа: 7
Автор ответа:
Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #7
Добавлено: 10.02.04 21:31
покажите полный код
Номер ответа: 8
Автор ответа:
Unica
Вопросов: 2
Ответов: 6
Профиль | | #8
Добавлено: 10.02.04 21:36
Номер ответа: 9
Автор ответа:
Unica
Вопросов: 2
Ответов: 6
Профиль | | #9
Добавлено: 10.02.04 21:38
Номер ответа: 10
Автор ответа:
Unica
Вопросов: 2
Ответов: 6
Профиль | | #10
Добавлено: 10.02.04 21:43
Номер ответа: 11
Автор ответа:
Павло
Вопросов: 8
Ответов: 24
Профиль | | #11
Добавлено: 10.02.04 22:22
Номер ответа: 12
Автор ответа:
Павло
Вопросов: 8
Ответов: 24
Профиль | | #12
Добавлено: 10.02.04 22:24
End Class - там лишний и End Name Space не скопировался....
Номер ответа: 13
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #13
Добавлено: 11.02.04 11:28
Попробуйте средставми Reflection. Сначала загружать библиотеку с
помощью System.Reflection.Assembly.LoadFrom (или Load), а потом
создавать экземпляр класса.
Только необходимо обязательно значть, где сборка лежит, в .NET иначе
никак.