我可以为静态对象创建实例吗?

问题描述 投票:0回答:0

我正在按照在线教程学习如何编写串行通信器。

我使用的是VS2019和.Net 5.0,和教程中使用的环境不一样

要使用 SerialPort 工具,我尝试创建:

        static SerialPort serialPort1;

如代码所示:

using System;
using System.Windows.Forms;
using System.IO.Ports;

namespace SerialPortCommunication {
    public partial class Form1 : Form {

        static SerialPort serialPort1;
        public Form1() {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) {
            string[] ports = System.IO.Ports.SerialPort.GetPortNames();
            comboBox1.Items.AddRange(ports);
            comboBox1.SelectedIndex = comboBox1.Items.Count > 0 ? 0 : -1;
        }

        private void button1_Click(object sender, EventArgs e) {
            if (button1.Text == "Open Port") {
                serialPort1.PortName = comboBox1.Text;
                serialPort1.Open();
                button1.Text = "Close Port";
            }
            else {
                serialPort1.Close();
                button1.Text = "Open Port";

            }
            
        }
    }
}

执行时遇到System.NullReferenceException: 'Object reference not set to an instance of an object.'

但是我改成之后

static SerialPort serialPort1 = new SerialPort();

VS 不再显示异常。

我的问题是:

有人告诉我我们不需要也不能为静态对象创建实例,但在这种情况下,为什么我需要创建一个实例来初始化 serialPort1?

我很困惑……

作为一个初学者,我可能会有一些不清楚的概念。你能给我一些指导或推荐一些资源供我学习吗?

c# static
© www.soinside.com 2019 - 2024. All rights reserved.