如果使用默认构造函数或无参数构造函数创建串行端口,则会为端口指定默认值。 From the documentation:
// Create a new SerialPort object with default settings.
_serialPort = new SerialPort();
当没有指定时,此构造函数使用默认属性值。例如,DataBits属性默认为8,Parity属性默认为None枚举值,StopBits属性默认为1,默认端口名称为COM1。
使用带参数的构造函数时:
在使用带参数的构造函数和使用默认构造函数时,不在串行端口构造函数的参数范围内的属性是否给出相同的默认值?
this question中的问题,有趣的答案,评论和随后的聊天讨论让我问这个问题。
答案 0 :(得分:7)
您可以查看其source code并查看构造函数和归档定义。
您会看到包括PortName
,BaudRate
,DataBits
,Parity
和StopBits
在内的所有重要属性都有默认值,如果它们不存在,构造函数参数,将使用默认值。
另外一些其他重要的属性也有默认值,虽然它们不在构造函数中,但是在某些情况下它们的默认值可能不太好。
例如,对于HandShake
,默认值为Handshake.None;
,而您可能希望将其设置为Handshake.XOnXOff
,Handshake.RequestToSend
或Handshake.RequestToSendXOnXOff
。对于此特定属性,您可能需要参考Hans comments。
看看构造函数:
public SerialPort(System.ComponentModel.IContainer container)
{
container.Add(this);
}
public SerialPort()
{
}
// Non-design SerialPort constructors here chain,
//using default values for members left unspecified by parameters
public SerialPort(string portName)
: this (portName, defaultBaudRate, defaultParity, defaultDataBits, defaultStopBits)
{
}
public SerialPort(string portName, int baudRate)
: this (portName, baudRate, defaultParity, defaultDataBits, defaultStopBits)
{
}
public SerialPort(string portName, int baudRate, Parity parity)
: this (portName, baudRate, parity, defaultDataBits, defaultStopBits)
{
}
public SerialPort(string portName, int baudRate, Parity parity, int dataBits)
: this (portName, baudRate, parity, dataBits, defaultStopBits)
{
}
public SerialPort(string portName, int baudRate, Parity parity,
int dataBits, StopBits stopBits)
{
this.PortName = portName;
this.BaudRate = baudRate;
this.Parity = parity;
this.DataBits = dataBits;
this.StopBits = stopBits;
}
以下是这些字段和默认值定义:
// ---------- default values -------------*
private const int defaultDataBits = 8;
private const Parity defaultParity = Parity.None;
private const StopBits defaultStopBits = StopBits.One;
private const Handshake defaultHandshake = Handshake.None;
private const int defaultBufferSize = 1024;
private const string defaultPortName = "COM1";
private const int defaultBaudRate = 9600;
private const bool defaultDtrEnable = false;
private const bool defaultRtsEnable = false;
private const bool defaultDiscardNull = false;
private const byte defaultParityReplace = (byte) '?';
private const int defaultReceivedBytesThreshold = 1;
private const int defaultReadTimeout = SerialPort.InfiniteTimeout;
private const int defaultWriteTimeout = SerialPort.InfiniteTimeout;
private const int defaultReadBufferSize = 4096;
private const int defaultWriteBufferSize = 2048;
private const int maxDataBits = 8;
private const int minDataBits = 5;
private const string defaultNewLine = "\n";
private const string SERIAL_NAME = @"\Device\Serial";
// --------- members supporting exposed properties ------------*
private int baudRate = defaultBaudRate;
private int dataBits = defaultDataBits;
private Parity parity = defaultParity;
private StopBits stopBits = defaultStopBits;
private string portName = defaultPortName;
// ASCII is default encoding for modem communication, etc.
private Encoding encoding = System.Text.Encoding.ASCII;
private Decoder decoder = System.Text.Encoding.ASCII.GetDecoder();
private int maxByteCountForSingleChar = System.Text.Encoding.ASCII.GetMaxByteCount(1);
private Handshake handshake = defaultHandshake;
private int readTimeout = defaultReadTimeout;
private int writeTimeout = defaultWriteTimeout;
private int receivedBytesThreshold = defaultReceivedBytesThreshold;
private bool discardNull = defaultDiscardNull;
private bool dtrEnable = defaultDtrEnable;
private bool rtsEnable = defaultRtsEnable;
private byte parityReplace = defaultParityReplace;
private string newLine = defaultNewLine;
private int readBufferSize = defaultReadBufferSize;
private int writeBufferSize = defaultWriteBufferSize;