Создание экземпляра класса в связанном дереве

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Создание экземпляра класса в связанном дереве

Сообщение Alec » 16.06.2009 (Вт) 20:58

VB 2008. (Опыта в .Net мало)
Создаю связанное дерево (связи типа Родитель, Подчиненный, Следующий, Предыдущий).
Ветви - разных классов, производных от базового, реализующего связи.
Вопрос такого характера. Как лучше добавлять ветви в дерево, исключив необходимость (и возможность) создания экзепляров классов ветвей без привязки к дереву.
Вижу пока два пути.
Первый:
Объявлять Enum с номерами типов ветвей, фукнкцию добавления в базовом классе с параметром номера типа ветви. Соответственно создание экземпляра класса ветви нужного типа, выбираемого с помощью Select Case.
Но. Объявление нового класса ветви требует внесение дополнений в базовый класс, чего не хочется.
Второй:
Объявлять Shared функции, перегруженные в каждом производном классе, в них создание экземпляров нужного типа.
Опять же, объявление нового производного класса потребует объявления в нем новой функции.
Учитывая, что пишу урывками в свободное время, ошибки здесь гарантированы...
Теперь вопрос.
Возможно ли передать в функцию (которую я хочу только объявить в базовом классе) тип нужного класса ветви, и как в этой функции создать экземпляр объекта именно этого типа?
Иногда лучше вовремя остановиться...
И начать заново!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Создание экземпляра класса в связанном дереве

Сообщение Nord777 » 17.06.2009 (Ср) 13:06

Возможно ли передать в функцию (которую я хочу только объявить в базовом классе) тип нужного класса ветви, и как в этой функции создать экземпляр объекта именно этого типа?

Код: Выделить всё
Public Class BaseClass

   Public Sub CreateInstance(Of TT As {BaseClass})()
      MsgBox("Создать экземпляр класса " & GetType(TT).Name)
      Dim AnyType As TT = Activator.CreateInstance(GetType(TT))
   End Sub

End Class

Public Class OneClass
   Inherits BaseClass
End Class

Public Class TwoClass
   Inherits BaseClass
End Class


Применение:
Код: Выделить всё
      Dim cls As New BaseClass
      cls.CreateInstance(Of OneClass)()
      cls.CreateInstance(Of TwoClass)()
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Создание экземпляра класса в связанном дереве

Сообщение Alec » 19.06.2009 (Пт) 21:01

Вот оно самое!
Значит плохо искал.
Только вот мне непонятен таинственный смысл фигурных скобок в
Nord777 писал(а):
Код: Выделить всё
Public Sub CreateInstance(Of TT As {BaseClass})()
 

Что с ними, что без них - результат один. Зачем они?
Иногда лучше вовремя остановиться...
И начать заново!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Создание экземпляра класса в связанном дереве

Сообщение Nord777 » 21.06.2009 (Вс) 22:59

Что с ними, что без них - результат один. Зачем они?
Это ограничение параметра. В данном случае можно передать только экземпляр класса BaseClass или производный от него.
Можно написать так: {BaseClass, IDisposable}, тогда можно передать только экземпляр класса BaseClass или производный от него и реализующий интерфейс IDisposable. За этим и нужны скобки.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 55

    TopList