跨类访问方法

时间:2019-01-22 01:12:15

标签: c# class

我希望能够从“ AtCommand”类访问“ Uart”类中的方法。即AT命令类通过串行端口向调制解调器发送命令和从调制解调器接收命令。我无法弄清楚为什么Uart中的方法在“ AtCommand”中不可用,但是如果我尝试从主窗体访问它们,这些方法仍然可用。

这是这两个类的代码,请注意:GsmPort下有一些扭曲的红线。写入并警告它在当前上下文中不可用(所以我认为是范围问题)。

using System.IO.Ports;
namespace ClassLessons
{
    class Uart
    {
        public bool Connected { get; set; }
        public bool DataInBuffer { get; set; }
        public string RxData;

    SerialPort port = new SerialPort();

    public Uart()
    {
        this.port.PortName = Properties.Settings.Default.PortName;
        this.DataInBuffer = false;
        this.RxData = "";
        this.port.BaudRate = 115200;
        this.port.ReadTimeout = 500;
        this.port.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
        Connected = false;
        try
        {
            if (!port.IsOpen)
            {
                port.Open();
                Connected = true;
            }
        }
        catch { }
    }

    private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        try
        {
            string data = this.port.ReadLine();
            RxData = data;
            DataInBuffer = true;
        }
        catch
        {

        }
    }

    public void Write(string message)
    {
        this.port.WriteLine(message);
    }


}

} }

AND AtCommand:

namespace ClassLessons
{
    class AtCommand
    {
        Uart GsmPort = new Uart();
        GsmPort.Write("Test");
    }
}

3 个答案:

答案 0 :(得分:1)

您的端口字段是私有的:

更改:

SerialPort port = new SerialPort();

收件人:

public SerialPort port = new SerialPort();

它将在其他课程中公开提供。

答案 1 :(得分:0)

您正在方法外调用GsmPort.Write("Test")。您可能想要类似的东西:

namespace ClassLessons
{
    class AtCommand
    {
        Uart GsmPort = new Uart();
        public AtCommand()
        {
            GsmPort.Write("Test");
        }
    }
}

答案 2 :(得分:0)

您需要同时将Uart和AtCommand设为公共