Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как создать новый экземпляр объекта, если его .... Добавлено: 01.07.05 11:56  

Автор вопроса:  Ваня | Web-сайт: www.UsverSoft.narod.ru | ICQ: 193909609 
Как создать новый экземпляр объекта, если его тип будет известен только в процессе выполнения кода?

Вот, например, есть Dim Obj1 as New Button
А что делать, если заранее не известно, что это будет именно Button?

Dim aType as Type
.....
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-сайт: www.UsverSoft.narod.ru
 Профиль | | #2
Добавлено: 01.07.05 12:40
Вот так нет проблем:
Public Class A
    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-сайт: www.UsverSoft.narod.ru
 Профиль | | #4
Добавлено: 01.07.05 20:05
Типы вот как получаю:
Dim App As System.Reflection.Assembly
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-сайт: www.UsverSoft.narod.ru
 Профиль | | #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

Ответить

Страница: 1 |

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



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