Gilcecler Carneiro Ответов: 4

Взаимодействие между классами


Привет, я хочу использовать переменную x в другом классе


public partial class Form1 : Form
   {
       static SerialPort _serialPort;

       ....
       }


Что я уже пробовал:

public partial class Form1 : Form
    {
        static SerialPort _serialPort;

        public Form1()
        {
            InitializeComponent();
        }
        private void ConfigurarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Config_Serial janela2 = new Config_Serial(this);
            janela2.ShowDialog();
        }


но когда я пишу "janela1. ? почему у вас нет опции _serialPort?



public partial class Config_Serial : Form
    {
        Form1 janela1;
        string[] portas = { "" };




        public Config_Serial(Form1 x)
        {
            InitializeComponent();
            janela1 = x;
            janela1.?  does not appear _serialPort
        }

4 Ответов

Рейтинг:
2

F-ES Sitecore

janela1 является экземпляром типа Form1, однако статические методы определяются на самом типе, а не на экземплярах этого типа. Таким образом, ваш код должен быть

Form1._serialPort


Обратите внимание, что поскольку переменная находится в самом типе, все ваши классы будут совместно использовать все, что есть _serialPort, поскольку существует только один тип Form1, поэтому убедитесь, что это именно то, что вам нужно.


Рейтинг:
18

jimmson

Вам нужно объявить свое поле общедоступным. Видеть Модификаторы Доступа - Руководство По Программированию На C# | Microsoft Docs[^]. Поля и другие члены неявно private, если только вы не определяете другой модификатор доступа.

Кроме того, вы можете рассмотреть возможность использования свойства вместо поля. Видеть Свойства - Руководство По Программированию На C# | Microsoft Docs[^] для получения дополнительной информации.


Gilcecler Carneiro

@jimmson я буду читать

Рейтинг:
1

BillWoodruff

Я предлагаю вам определить все операции, связанные с установлением, поддержанием и вызовом событий, связанных с использованием последовательного порта в одном месте. статический класс. Используйте общедоступные свойства для предоставления доступа к данным/буферам и т. д. Не подвергайте событий последовательного порта для внешних классов делегаты, как и 'кнопку func.

Существует множество публичных библиотек для взаимодействия последовательного порта с C#: [^]. Проверьте их.

Вот статья в СР много нашел полезного: [^]


Рейтинг:
0

Dave Kreskowiak

В отличие от того, что другие люди говорили на эту тему, не выставляйте свои переменные класса и поля как общедоступные!

Один класс/форма никогда не должен знать о внутренней работе другого класса/формы. Ваша форма Config_Serial должна предоставлять общедоступные методы и свойства для управления моделью данных, поддерживаемой формой Config_Serial.


Gilcecler Carneiro

спасибо. Я изменю и опубликую снова