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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамические типы в классах, Class(Of MyType) 
:(
    Опции темы
Pankon
Дата 16.3.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Имею класс

Код


Public Class MClass(Of MyType)
    Dim mObj As Object
    Public Sub New(ByVal obj As Object)
        mObj = obj
    End Sub
    Public Function getObj() As MyType
        Return CType(mObj, MyType)
    End Function
End Class



и процедуру
Код

    Sub Primer1()
        Dim objInt1 As Integer
       
        'Работает
        Dim objMClass1 As MClass(Of Integer)
        objMClass1 = New MClass(Of Integer)(objInt1)

        Dim objInt2 As Integer
        Dim mType As System.Type = objInt2.GetType
        'Не работает
        '(Of mType) - дает ошибку
        Dim objMClass2 As MClass(Of mType)
        objMClass2 = New MClass(Of mType)(objInt2)
    End Sub


Как реализовать что-то подобное, надеюсь, идея понятна.
smile


PM MAIL   Вверх
arilou
Дата 16.3.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Pankon,

Код

public class BaseClassForMyClasses
end class

public class myclass1
inherits BaseClassForMyClasses
end class

public class myclass2
inherits BaseClassForMyClasses
end class

' ......

Sub Primer1()
        Dim objInt1 As BaseClassForMyClasses
       
        "работает
        objInt1 = Activator.CreateInstance(GetType(myclass1))
End Sub


Надеюсь, идея понятна? smile Наличие дженериков сути не меняет

Это сообщение отредактировал(а) arilou - 16.3.2006, 17:26


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Pankon
Дата 16.3.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет не понятна. smile

Может я чего непонял. smile

но вопрос был про динамические типы внутри класса (Of MyType).
Затруднение состоит в том, что хотелось бы инициализировать класс, заранее не зная, какой "внутренний тип" будет у этого обьекта (т.е. динамическиый тип, (Of MyType)). VB же позволяет при инициализации обьекта ТОЛьКО (Dim objMClass1 As MClass(Of Integer) ) определенные типы, что, как понимаете, динамическим не назовешь.

ПС. Плохо изьясняю smile . Конец рабочего дня....

Это сообщение отредактировал(а) Pankon - 16.3.2006, 18:37
PM MAIL   Вверх
Exception
Дата 16.3.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ни фига не понял smile . Разъясни суть задачи и, пожалуйста, без грамматических ошибок.
Добавлено @ 18:24
Может, тебе такое надо:
Код
Public Class MyClass (Of T)
Private _obj As T
Sub New (obj As T)
_obj = obj
End Sub
End Class
?

PM   Вверх
Pankon
Дата 16.3.2006, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Exception @ 16.3.2006, 18:20)
Ни фига не понял smile . Разъясни суть задачи и, пожалуйста, без грамматических ошибок.
Добавлено @ 18:24
Может, тебе такое надо:
Код
Public Class MyClass (Of T)
Private _obj As T
Sub New (obj As T)
_obj = obj
End Sub
End Class
?

Пытаюсь обьяснить.
smile

Теперь сделай обьект(или обьяви переменную) из своего класса:
например так:
Dim objMClass1 As MyClass(Of Integer)
да, работает, но, однако Integer!!!!

А как вместо Integer подсунуть, например, переменную, где хранится другой тип smile


ПС. А где aбшибки тa блин? smile

Это сообщение отредактировал(а) Pankon - 16.3.2006, 18:35
PM MAIL   Вверх
arilou
Дата 16.3.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Pankon, теперь понял. К сожалению, в твоем варианте это не пройдет. Ты хочешь в рантайме создавать generic. А это невозможно, т.к. type-safety реализуется на этапе компиляции. Да и зачем тебе ?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Pankon
Дата 16.3.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообще все началось с того, что мне нужен обьект, который кушает запись из базы данных и сохраняет значения полей. Запихнул я ето все collection значит, а вот с типами-то и проблемки.

Очень не хочется обьяснять коллегам, что после вызова моего обьекта, нужно еще CType для "полей" делать.

А делать 50 свойств в обьекте с зананными типами, мне лень. smile

Вот и ищу, понимаешь, обходные пути.

smile

Это сообщение отредактировал(а) Pankon - 16.3.2006, 18:58
PM MAIL   Вверх
Exception
Дата 16.3.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Какие еще обходные пути smile ? Разумеется, надо делать "объект с 50 свойствами" smile . Другое дело, что мешает создать типизированный датасет?
PM   Вверх
Pankon
Дата 17.3.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Про "типизированный датасет" поподробней, пожалуйста smile
PM MAIL   Вверх
Exception
Дата 17.3.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Тут лучше чем в MSDN не скажешь. Это аналоги датасетов, но с сильной типизацией. Честно говоря, гадость, всё равно им на смену придёт DLinq, про который я сейчас пишу статью. Вкратце про него можно почитать в статье LINQ Project Overview, линк у меня в подписи.
PM   Вверх
Pankon
Дата 17.3.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Exception @ 16.3.2006, 21:36)
Разумеется, надо делать "объект с 50 свойствами"

А что-же делать с полями, которые NULL smile
PM MAIL   Вверх
Exception
Дата 17.3.2006, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Использовать Nullable-типы. Как я уже говорил, читал мой обзор. Хотя DLinq появится только в .NET 3.0, preview-версия уже готова.
PM   Вверх
arilou
Дата 17.3.2006, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Типизированные датасеты поддерживают и такое...

Цитата(Pankon @ 16.3.2006, 18:56 Найти цитируемый пост)
Вот и ищу, понимаешь, обходные пути.

Написать простенький кодогенератор.


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


Эксперт
****


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

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



Честно говоря, меня уже тошнит от типизированных датасетов smile
PM   Вверх
Pankon
Дата 17.3.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(arilou @ 17.3.2006, 16:38)

Написать простенький кодогенератор.

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

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

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


 




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


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

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