Я правильно передаю свой аргумент с помощью ref? - PullRequest
2 голосов
/ 14 июня 2010
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 ]

3 голосов
/ 14 июня 2010

Вы не можете передать временное значение с ref, потому что вызываемый метод должен иметь возможность назначить переменную вызывающего. Почему вы используете его для начала? Вы никогда не назначаете COMMPORT.

Почему бы просто:

public SMSCOMMS(string COMMPORT)
2 голосов
/ 14 июня 2010

Нет необходимости передавать параметр ref, если вы не собираетесь изменять фактическую переменную, переданную вызывающей стороной.Поскольку вы не можете изменить строковый литерал (по определению это константа), он не подходит для передачи по ссылке.

1 голос
/ 14 июня 2010

Вы можете использовать ref только тогда, когда вы передаете что-то, что имеет полезную ссылку. Это означает, что вы должны сначала объявить переменную, а затем передать эту переменную с помощью ref:

string comm = "COM6";
SMSCOMMS SMSEngine = new SMSCOMMS(ref comm);
...