Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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 - это уже отдельная тема... Структура в НЕТ тоже штука особенная, и работа с нею несколько отличается.. В любом случае в книгах рекомендую, по возможности, отказаться от ее использования ввиду особенностей выделения памяти под нее.. И заменить структуру на класс..

Но передавать массив структур тебе никто не запрещает..

''' <summary>
''' 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 передать тебе его компилятор не позволит. Проблемы не вижу...

Ответить

Страница: 1 |

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



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