55 / 55 / 5
Регистрация: 09.06.2011
Сообщений: 207
1

Создание класса, его объявление и доступ к нему

03.12.2011, 15:21. Показов 11909. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Простите, если пишу не в тот раздел.

Решил на досуге попрограмировать и вот дошел до того, что назрела необходимость в создании собственного класса. Но пока я в этом полный ноль и потому прошу совета.

Вот мой класс:

VB.NET
1
2
3
4
5
6
    Public Class Stroka
        Public list_of_string As New List(Of String)
        Public Sub add(ByVal str)
            list_of_string.Add(str)
        End Sub
    End Class
Мне необходимо, чтобы в список List (of String), при каждом обращении к функции Add, добавлялась ещё одна новая строка, а не переписывалась старая. Например, в теле программы я пишу такой код:

VB.NET
1
2
3
Dim string1 As New Stroka
string1.add("Hello, World")
string1.add("Bye, World")
Я так понимаю, что при каждом обращении к классу Stroka конструктором New создаётся новый экземпляр List(Of String) и он переписывается заново, но мне-то нужно добавлять в тот же экземпляр новые строки, а не переписывать. Что я делаю неправильно и как мне выйти из положения?

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2011, 15:21
Ответы с готовыми решениями:

Объявление и определение глобального массива структур. Доступ к нему из любого cpp. Как?
Вот такая тема. Есть файл BazaOfProgram.h...

Объявление класса, создание экземпляров класса. Наследование классов
Вообщем начал делать программу:"Создать класс Матрицы, обеспечивающего размещение матрицы...

Создание объектов класса и обращение к нему
Такой вопрос. У меня есть класс "Casern" , который наследуется от абстрактного класса "Buildings"...

Объявление класса без его реализации
Добрый день! Я (вроде бы) знаю как объявлять класс, не подключая его в хедере class...

10
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
03.12.2011, 17:27 2
Цитата Сообщение от Urs Посмотреть сообщение
Я так понимаю, что при каждом обращении к классу Stroka конструктором New создаётся новый экземпляр List(Of String) и он переписывается заново
да, так и есть.
VB.NET
1
Dim string1 As New Stroka
объяви глобально, например, в классе формы, а не в процедурах.

Добавлено через 42 секунды

Не по теме:

Цитата Сообщение от Urs Посмотреть сообщение
Bye, World
и это... Побольше оптимизма :D

0
55 / 55 / 5
Регистрация: 09.06.2011
Сообщений: 207
03.12.2011, 21:02  [ТС] 3
А что значит глобально? Если я объявляю его в классе формы, вне процедур, то в классе Stroka подчёркивает "list_of_string.Add(str)" и выдаёт сообщение "Ссылка на член, .... , должна быть ссылкой на объект"...
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
03.12.2011, 21:28 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Urs, ничего подобного, вот полный код:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Class Form1
    Dim string1 As New Stroka
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        string1.add("Hello, World")
        string1.add("Bye, World")
    End Sub
End Class
Public Class Stroka
    Public list_of_string As New List(Of String)
    Public Sub add(ByVal str)
        list_of_string.Add(str)
    End Sub
End Class
1
55 / 55 / 5
Регистрация: 09.06.2011
Сообщений: 207
04.12.2011, 17:14  [ТС] 5
Памирыч, спасибо! Тепрь я понял. Просто думал про то, что ты предлагаешь Public list_of_string As New List(Of String) объявить в классе формы. Невнимательно тебя прочитал...

Добавлено через 25 минут
Памирыч, ещё вопрос: как выйти из положения, если у меня массив строк? Чёт, не догоняю... Вот код:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Class Form1
Dim strings(10) As Stroka
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        strings(0) = New Stroka
        strings(0).add("Hello, World")
 
        strings(1) = New Stroka
        strings(1).add("Bye, World")
 
    End Sub
End Class
Public Class Stroka
    Public list_of_string As New List(Of String)
    Public Sub add(ByVal str)
        list_of_string.Add(str)
    End Sub
End Class
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
04.12.2011, 20:49 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Urs, код рабочий. Можно добавить:
VB.NET
1
2
3
4
5
6
7
8
9
10
        strings(0) = New Stroka
        strings(0).add("Hello, World")
        strings(0).add("Hello, World1")
        strings(0).add("Hello, World2") 
 
        strings(1) = New Stroka
        strings(1).add("Bye, World")
        strings(1).add("Bye, World1")
        strings(1).add("Bye, World2")
        strings(1).add("Bye, World3")
Если заранее неизвестен размер массива, а от ReDim тошнота, самое время изучить коллекции:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Class Form1
    Dim strings As New List(Of Stroka)
    Dim Tmp As Stroka
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        Tmp = New Stroka
        Tmp.add("Hello, World")
        Tmp.add("Hello, World1")
        strings.Add(Tmp)
 
        Tmp = New Stroka
        Tmp.add("Bye, World")
        Tmp.add("Bye, World1")
        strings.Add(Tmp)
        
        MsgBox(strings(1).list_of_string(1))
    End Sub
End Class
Public Class Stroka
    Public list_of_string As New List(Of String)
    Public Sub add(ByVal str)
        list_of_string.Add(str)
    End Sub
End Class
1
395 / 314 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
23.12.2014, 18:50 7
А как работать с классом, если такое условие.
Допустим, что есть Form1.
Есть файл класса test.vb

На Form1 у меня сейчас есть процедура:
VB.NET
1
2
3
Sub Log()
        txt.AppendText("текстовая строка")
    End Sub
Чтобы использовать процедуру просто помещаю на Form1 кнопку Button1 и там прописываю Log() и всё работает.

А как правильно поместить этот код в файл класса test.vb:
VB.NET
1
2
3
Sub Log()
        txt.AppendText("текстовая строка")
    End Sub
и вызвать его на Form1 при нажатии Button1?

Добавлено через 2 минуты
Проще говоря, мне нужно повторяющиеся процедуры убрать из Form1 в файлы класса.
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
23.12.2014, 18:57 8
Дядя Корней, так как txt находится в классе Form1, то метод можно вызывать "как есть"

Класс test.vb не имеет отношения к компоненту txt, и он не знает, что это.

Выход: Создать эту процедуру в свежесозданном модуле. Но придется все же указать родителя для txt
VB.NET
1
2
3
Sub Log()
        Form1.txt.AppendText("текстовая строка")
    End Sub
Далее метод можно вызывать как в главной форме, так и других формах и классах проекта.
По крайней мере, я так думаю)
1
52 / 52 / 25
Регистрация: 01.02.2014
Сообщений: 201
23.12.2014, 19:21 9
Цитата Сообщение от Памирыч Посмотреть сообщение
Но придется все же указать родителя для txt
а можно ли не указывать родителя, а передать txt, как параметр?
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
23.12.2014, 19:25 10
Visualist, почему нет?
VB.NET
1
2
3
Sub Log(ByVal txt As TextBox)
        txt.AppendText("текстовая строка")
    End Sub
Но какой в этом смысл?
0
395 / 314 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
23.12.2014, 19:43 11
Памирыч, спасибо тебе, получилось всё сделать как я и хотел.
0
23.12.2014, 19:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2014, 19:43
Помогаю со студенческими работами здесь

Создание класса и объявление конструктора
Доброе время суток! Используя в качестве примера http://www.delphibasics.ru/TList.php пытаюсь...

Объявление класса и выделение памяти для его полей
Читаю Троелсена, вижу такое объявление класса: class Rectangle { private Point...

Объявление класса, создание объекта и вызов функции-члена
Всем добрый день! Вот так я объявляю класс. typedef map<string, double> datablock; typedef...

Модем ADSL подключен к интернету, к нему подключен маршрутизатор TL-WR841N, возможен ли к нему внешний доступ ?
Всем привет Модем подключен к интернет через ADSL (pppoe) , к модему подключен...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru