未初始化的串行端口属性是否像使用默认构造函数时一样被赋予默认值?
Are uninitialised serial port attributes given default values as they are when using the default constructor?
如果使用默认构造函数或无参数构造函数创建串口,则为端口赋予默认值。 From the documentation:
// Create a new SerialPort object with default settings.
_serialPort = new SerialPort();
This constructor uses default property values when none are specified. For example, the DataBits property defaults to 8, the Parity property defaults to the None enumeration value, the StopBits property defaults to 1, and a default port name of COM1.
使用带参数的构造函数时:
不在串口构造函数参数范围内的属性,在使用带参构造函数和使用默认构造函数时,是否给定相同的默认值?
中的问题,有趣的答案,评论和随后的聊天讨论让我提出这个问题。
您可以查看其 source code 并查看构造函数和归档定义。
您会看到所有重要的属性,包括 PortName
、BaudRate
、DataBits
、Parity
和 StopBits
都有一个默认值,如果它们不是存在于构造函数参数中,默认值将用于它们。
还有一些其他重要属性它们也有默认值,虽然它们不存在于构造函数中,但是在某些情况下它们的默认值可能不好。
例如,HandShake
的默认值为 Handshake.None;
,而您可能希望将其设置为 Handshake.XOnXOff
、Handshake.RequestToSend
或 Handshake.RequestToSendXOnXOff
。对于这个特定的 属性,您可能需要参考 Hans 的 .
看看构造函数:
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;
如果使用默认构造函数或无参数构造函数创建串口,则为端口赋予默认值。 From the documentation:
// Create a new SerialPort object with default settings.
_serialPort = new SerialPort();
This constructor uses default property values when none are specified. For example, the DataBits property defaults to 8, the Parity property defaults to the None enumeration value, the StopBits property defaults to 1, and a default port name of COM1.
使用带参数的构造函数时:
不在串口构造函数参数范围内的属性,在使用带参构造函数和使用默认构造函数时,是否给定相同的默认值?
您可以查看其 source code 并查看构造函数和归档定义。
您会看到所有重要的属性,包括 PortName
、BaudRate
、DataBits
、Parity
和 StopBits
都有一个默认值,如果它们不是存在于构造函数参数中,默认值将用于它们。
还有一些其他重要属性它们也有默认值,虽然它们不存在于构造函数中,但是在某些情况下它们的默认值可能不好。
例如,HandShake
的默认值为 Handshake.None;
,而您可能希望将其设置为 Handshake.XOnXOff
、Handshake.RequestToSend
或 Handshake.RequestToSendXOnXOff
。对于这个特定的 属性,您可能需要参考 Hans 的
看看构造函数:
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;