Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как создать объект в VB.Net? Добавлено: 10.02.04 18:16  

Автор вопроса:  Unica

Есть описание класса в файлике, файликов много, и где лежат - непонятно.. Необходимо во время работы проги считывать описание класса и создавать объект этого класса.

Пробовала использовать CreateObject, но вылазит ошибка "невозможно создать ActiveX компонент".

Помогите плиз...

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
  Артём Л.



ICQ: 280044491 

Вопросов: 43
Ответов: 227
 Профиль | | #1 Добавлено: 10.02.04 18:35
может reflection поюзать?

Ответить

Номер ответа: 2
Автор ответа:
 Павло



Вопросов: 8
Ответов: 24
 Профиль | | #2 Добавлено: 10.02.04 19:52

Dim MyType As Type = Type.GetType("Строка имя твоего типа")

Dim Obj As Object = Activator.CreateInstance(MyType) - здесь твой объект

Ответить

Номер ответа: 3
Автор ответа:
 Павло



Вопросов: 8
Ответов: 24
 Профиль | | #3 Добавлено: 10.02.04 19:54
P.S. Правда, это работает если объект входит в сборку. Иначе, имхо более сложную конструкцию через Reflection юзать надо.

Ответить

Номер ответа: 4
Автор ответа:
 Unica



Вопросов: 2
Ответов: 6
 Профиль | | #4 Добавлено: 10.02.04 21:01

А как должна "строка имя моего типа" выглядеть? Если у меня сборка с именем "MyAssambly", пространство имен в ней "SampleNS", а имя класса "Sample".

Если брать строку "SampleNS.Sample", то тип MyType оказывается nothing...

ЗЫ: а может я просто совсем я совсем тупая, а?...

Ответить

Номер ответа: 5
Автор ответа:
  Артём Л.



ICQ: 280044491 

Вопросов: 43
Ответов: 227
 Профиль | | #5 Добавлено: 10.02.04 21:12
нужно брать:
MyAssambly.SampleNS.Sample

Ответить

Номер ответа: 6
Автор ответа:
 Unica



Вопросов: 2
Ответов: 6
 Профиль | | #6 Добавлено: 10.02.04 21:21

Не работает...

Все равно MyType = Nothing, а дальше соответственно ошибка "Value cannot be null"

Ответить

Номер ответа: 7
Автор ответа:
  Артём Л.



ICQ: 280044491 

Вопросов: 43
Ответов: 227
 Профиль | | #7 Добавлено: 10.02.04 21:31
покажите полный код

Ответить

Номер ответа: 8
Автор ответа:
 Unica



Вопросов: 2
Ответов: 6
 Профиль | | #8 Добавлено: 10.02.04 21:36

Файл сборки 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

Ответить

Номер ответа: 9
Автор ответа:
 Unica



Вопросов: 2
Ответов: 6
 Профиль | | #9 Добавлено: 10.02.04 21:38

ЗЫ: да, замечательно вся структуризации пропала... Надеюсь понятно?

Ответить

Номер ответа: 10
Автор ответа:
 Unica



Вопросов: 2
Ответов: 6
 Профиль | | #10 Добавлено: 10.02.04 21:43

ЗЗЫ опс, строку с кнопкой в одном месте исправить забыла, там

Private Sub Button2_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles Button2.Click

Плохо, что в форуме нет возможности редактировать свои же сообщения

Ответить

Номер ответа: 11
Автор ответа:
 Павло



Вопросов: 8
Ответов: 24
 Профиль | | #11 Добавлено: 10.02.04 22:22

Так все работает. Имя 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

End Class

Ответить

Номер ответа: 12
Автор ответа:
 Павло



Вопросов: 8
Ответов: 24
 Профиль | | #12 Добавлено: 10.02.04 22:24
End Class - там лишний и End Name Space не скопировался....

Ответить

Номер ответа: 13
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #13
Добавлено: 11.02.04 11:28
Попробуйте средставми Reflection. Сначала загружать библиотеку с
помощью System.Reflection.Assembly.LoadFrom (или Load), а потом
создавать экземпляр класса.
Только необходимо обязательно значть, где сборка лежит, в .NET иначе
никак.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам