Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/58: Рейтинг темы: голосов - 58, средняя оценка - 4.59
55 / 55 / 5
Регистрация: 09.06.2011
Сообщений: 207

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

03.12.2011, 15:21. Показов 12167. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2011, 15:21
Ответы с готовыми решениями:

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

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

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

10
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
03.12.2011, 17:27
Цитата Сообщение от 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  [ТС]
А что значит глобально? Если я объявляю его в классе формы, вне процедур, то в классе Stroka подчёркивает "list_of_string.Add(str)" и выдаёт сообщение "Ссылка на член, .... , должна быть ссылкой на объект"...
0
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
03.12.2011, 21:28
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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  [ТС]
Памирыч, спасибо! Тепрь я понял. Просто думал про то, что ты предлагаешь 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
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
04.12.2011, 20:49
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
23.12.2014, 18:50
А как работать с классом, если такое условие.
Допустим, что есть 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
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
23.12.2014, 18:57
Дядя Корней, так как txt находится в классе Form1, то метод можно вызывать "как есть"

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

Выход: Создать эту процедуру в свежесозданном модуле. Но придется все же указать родителя для txt
VB.NET Скопировано
1
2
3
Sub Log()
        Form1.txt.AppendText("текстовая строка")
    End Sub
Далее метод можно вызывать как в главной форме, так и других формах и классах проекта.
По крайней мере, я так думаю)
1
 Аватар для Visualist
52 / 52 / 25
Регистрация: 01.02.2014
Сообщений: 201
23.12.2014, 19:21
Цитата Сообщение от Памирыч Посмотреть сообщение
Но придется все же указать родителя для txt
а можно ли не указывать родителя, а передать txt, как параметр?
0
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
23.12.2014, 19:25
Visualist, почему нет?
VB.NET Скопировано
1
2
3
Sub Log(ByVal txt As TextBox)
        txt.AppendText("текстовая строка")
    End Sub
Но какой в этом смысл?
0
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
23.12.2014, 19:43
Памирыч, спасибо тебе, получилось всё сделать как я и хотел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2014, 19:43
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер