Страница: 1 |
Страница: 1 |
Вопрос: Передача массива сртуктур из одного класса в др.
Добавлено: 15.02.07 09:22
Автор вопроса: FIX | ICQ: 348680795
Имеется два класса. В одном огромный массив типов(структур)(объявлен как Public), который необходимо передать в функцию другого. Возможно ли передать этот массив в функцию другого по ссылке или указателю, в общем не создавая копию массива. Если можно, то как?
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Viktor
Вопросов: 9
Ответов: 29
Профиль | | #1
Добавлено: 15.02.07 10:11
Если я правильно понял вопрос, то воспльзуйся сериализацыей XML. Примеры есть в MSDN. Мне очень помогло. Сохранял структуры и масивы структур в XML файле, и загружал их обратно (настраивал FlexGrid исохранял настройки). Работает очень быстро даже с большими структурами
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 15.02.07 10:31
А в чем, собственно, проблема? Массив передается куда угодно, и как угодно.. А вот ByVal или ByRef - это уже отдельная тема... Структура в НЕТ тоже штука особенная, и работа с нею несколько отличается.. В любом случае в книгах рекомендую, по возможности, отказаться от ее использования ввиду особенностей выделения памяти под нее.. И заменить структуру на класс..
Но передавать массив структур тебе никто не запрещает..
''' Structure Example
''' </summary>
''' <remarks>EROS, VS 2005</remarks>
Public Class Form1
Private Structure Book
Sub New(ByVal Author As String, _
ByVal Title As String, _
Optional ByVal ISBN As String = ""
'// Initialze structure
If String.IsNullOrEmpty(Author) Then
_author = String.Empty
Else
_author = Author.Trim
End If
If String.IsNullOrEmpty(Title) Then
_title = String.Empty
Else
_title = Title.Trim
End If
_iSBN = ISBN
End Sub
Private _author As String
Public ReadOnly Property Author() As String
Get
Return _author
End Get
End Property
Private _title As String
Public ReadOnly Property Title() As String
Get
Return _title
End Get
End Property
Private _iSBN As String
Public Property ISBN() As String
Get
Return _iSBN
End Get
Set(ByVal Value As String)
_iSBN = Value
End Set
End Property
Public Overrides Function ToString() As String
Return String.Format("{0}{3}{1}{3}{2}", _
_author, _
_title, _
_iSBN, _
vbNewLine)
End Function
End Structure
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Dim _myLibrary() As Book = New Book() {New Book("Д. Мак-Манус", "Обработка баз данных", _
New Book("Д. Эпплман", "Переход на VB.NET. Концепции, Стратегия, Код", _
New Book("Д. Эпплман", "Win32 API & VB", "123-45679-0000"}
ShowResult(_myLibrary(1))
SetISBN(_myLibrary, 1, "555-55555-5555"
ShowResult(_myLibrary(1))
End Sub
Private Sub SetISBN(ByVal _library() As Book, _
ByVal _index As Int32, _
ByVal _ISBN As String)
Debug.Assert(_library IsNot Nothing)
Debug.Assert(_index < _library.Length - 1)
Debug.Assert(_ISBN IsNot Nothing)
_library(_index).ISBN = _ISBN
End Sub
Private Sub ShowResult(ByVal _book As Book)
MessageBox.Show(_book.ToString, _
"Structure Example", _
MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End Sub
End Class
Номер ответа: 3
Автор ответа:
FIX
ICQ: 348680795
Вопросов: 39
Ответов: 62
Профиль | | #3
Добавлено: 15.02.07 17:53
В Net несомневаюсь, а у меня VB6. Может есть хотяб какой нибудь способ?
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 15.02.07 18:44
блин... (((( сорри тогда..
Паш, когда форму для вопроса сделаешь?? Где будет ОБЯЗАТЕЛЬНОЕ поле: "Используемый язык программирования"!???
Номер ответа: 5
Автор ответа:
Eugeny
Вопросов: 0
Ответов: 26
Профиль | | #5
Добавлено: 15.02.07 20:44
Public Type USERTYPE
... as ...
... as ...
End Type
dim usrtp() as USERTYPE
VarPtr(usrtp(0)) - передавай куда хочешь
Номер ответа: 6
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #6
Добавлено: 16.02.07 12:22
В чем гемор? Массив априори передается как ByRef - ибо ByVal передать тебе его компилятор не позволит. Проблемы не вижу...