我使用ref正确传递我的论点吗?

时间:2010-06-14 05:36:02

标签: c# keyword ref

SMSCOMMS SMSEngine = new SMSCOMMS("COM6");

代码似乎没有将我COM6的论点视为有效的ref string。我该如何解决这个问题?

public class SMSCOMMS
{
   public SMSCOMMS(ref string COMMPORT)
   {
    SMSPort = new SerialPort();
    SMSPort.PortName = COMMPORT;
    SMSPort.BaudRate = 9600;
    SMSPort.Parity = Parity.None;
    SMSPort.DataBits = 8;
    SMSPort.StopBits = StopBits.One;
    SMSPort.Handshake = Handshake.RequestToSend;
    SMSPort.DtrEnable = true;
    SMSPort.RtsEnable = true;
    SMSPort.NewLine = System.Environment.NewLine;
    ReadThread = new Thread(
        new System.Threading.ThreadStart(ReadPort));
}

3 个答案:

答案 0 :(得分:3)

您无法使用ref传递临时值,因为被调用的方法必须能够分配给调用者的变量。你为什么一开始使用它?您永远不会分配到COMMPORT

为什么不呢:

public SMSCOMMS(string COMMPORT)

答案 1 :(得分:2)

除非您打算修改调用方传递的实际变量,否则无需传递ref参数。由于无法修改字符串文字(根据定义它是常量),因此无法通过引用传递。

答案 2 :(得分:1)

当您传递具有可用参考的内容时,您只能使用ref。这意味着你必须先声明一个变量,然后通过ref:

传递该变量
string comm = "COM6";
SMSCOMMS SMSEngine = new SMSCOMMS(ref comm);