Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BindingFlags для Activator.CreateInstance, какие указывать для Private Sub New? 
:(
    Опции темы
ZUBR80
Дата 20.1.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.5.2005

Репутация: 1
Всего: 2



Подскажите, какие атрибуты BindingFlags надо указать при вызове Activator.CreateInstance, чтобы вызвать Private или Friend Sub New.
Вообще что-то странное.
Вот такой код вызывает Public Sub New:

Activator.CreateInstance(GetType(Т))

, а вот такой не вызывает:

Activator.CreateInstance(GetType(ТипУнификатора), Reflection.BindingFlags.CreateInstance)

Я уже замучался smile . Всякие наборы перепробовал, но всегда возвращает ошибку:

System.MissingMethodException
PM MAIL   Вверх
mr.DUDA
Дата 20.1.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: нет
Всего: 232



Цитата(ZUBR80 @ 20.1.2006, 13:14 Найти цитируемый пост)
Подскажите, какие атрибуты BindingFlags надо указать при вызове Activator.CreateInstance, чтобы вызвать Private или Friend Sub New. Вообще что-то странное.

Sub - это метод (процедура в VB.NET), для получения метода из типа нужно дёргать Type.GetMethod. Метод CreateInstance возвращает экземпляр типа, созданного по reflection, и BindingFlags в нём используется для указания параметров класса, а не метода.


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 22.1.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



mr.DUDA, ни-ни) Sub New в VB .NET - это конструктор, так что все он правильно делает..
PM   Вверх
mr.DUDA
Дата 22.1.2006, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: нет
Всего: 232



Странно. Такой вот код работает:
Код
        Dim ci() As Reflection.ConstructorInfo
        ci = GetType(Class1).GetConstructors(Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public)
        ci(0).Invoke(Nothing)



--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 22.1.2006, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



А с Private Sub New работает?
P.S. С такими вопросами обращаться надо в раздел по VB .NET или хотя бы указывать язык разработки..
PM   Вверх
Exception
Дата 23.1.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Погоди-ка. Private-конструктор у тебя точно вызвать не выйдет )) А зачем?
PM   Вверх
ZUBR80
Дата 27.1.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.5.2005

Репутация: 1
Всего: 2



Цитата(Exception @ 23.1.2006, 16:56 Найти цитируемый пост)

Private-конструктор у тебя точно вызвать не выйдет

Вот этот код работает:
Код

Imports System.Reflection
Module MainModule
    Sub Main()
        Dim t As Type = GetType(TT)
        Dim m As ConstructorInfo = t.GetConstructors(BindingFlags.Instance Or BindingFlags.NonPublic)(0)
        Dim TT As TT = m.Invoke(New Object() {"VASSYA"})
        MsgBox(TT.s)
    End Sub
End Module
Public Class TT
    Private Sub New(ByVal s As String)
        Me.s = s
    End Sub
    Public ReadOnly s As String
End Class


Т.е. в принципе можно вызвать приватный конструктор.
Видимо глюк при работе Activator.CreateInstance :о(

Это сообщение отредактировал(а) ZUBR80 - 27.1.2006, 14:12
PM MAIL   Вверх
arilou
Дата 27.1.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 7
Всего: 61



Блин. Молодец, что вспомнил про альтернативный способ вызова конструктора
+1


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.