未初始化的串行端口属性是否具有使用默认构造函数时的默认值? [英] Are uninitialised serial port attributes given default values as they are when using the default constructor?

查看:92
本文介绍了未初始化的串行端口属性是否具有使用默认构造函数时的默认值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果使用默认构造函数或无参数构造函数创建串行端口,则会为该端口提供默认值。



使用带有参数的构造函数时:

当使用带有参数的构造函数和使用默认构造函数时,不在串行端口构造函数参数内的属性是否具有相同的默认值? / p>

,有趣的答案,注释和随后的聊天讨论让我问这个问题。

您可以查看其源代码,并查看构造函数和文件定义。



您将看到所有重要属性,包括 PortName BaudRate DataBits Parity StopBits 具有默认值(如果不存在)在构造函数参数中,将使用默认值。



其他一些重要属性也具有默认值,虽然它们不存在于构造函数中,但在某些情况下,它们的默认值可能不好。



例如对于 HandShake ,默认值为 Handshake.None; ,而您可能希望将其设置为 Handshake.XOnXOff Handshake.RequestToSend Handshake.RequestToSendXOnXOff 。对于此特定属性,您可能要参考汉斯的评论



看看构造函数:

  public SerialPort(System.ComponentModel.IContainer容器)
{
container.Add(this);
}
public SerialPort()
{
}
//非设计型SerialPort构造函数在这里链接,
//对未指定的成员使用默认值通过参数
public SerialPort(string portName)
:this(portName,defaultBaudRate,defaultParity,defaultDataBits,defaultStopBits)
{
}
public SerialPort(string portName,int baudRate)
:this(端口名,baudRate,defaultParity,defaultDataBits,defaultStopBits)
{
}
public SerialPort(string portName,int baudRate,Parity parity)
: this(端口名,baudRate,奇偶校验,defaultDataBits,defaultStopBits)
{
}
public SerialPort(string portName,int baudRate,Parity parity,int dataBits)
:this(端口名, baudRate,奇偶校验,dataBits,defaultStopBits)
{
}
public SerialPort(string portName,int baudRate,Parity parity,
int dataBits,StopBits stopBits)
{
this.PortName = portName;
this.BaudRate = baudRate;
this.Parity =奇偶校验;
this.DataBits = dataBits;
this.StopBits = stopBits;
}

这是这些字段和默认值定义:

  // ----------默认值------------- * 

private const int defaultDataBits = 8;
private const Parity defaultParity = Parity.None;
private const StopBits defaultStopBits = StopBits.One;
private const握手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;
私有常量字符串defaultNewLine = \n;

私有常量字符串SERIAL_NAME = @ \Device\Serial;





  //- -------支持公开属性的成员------------ * 
private int baudRate = defaultBaudRate;
private int dataBits = defaultDataBits;
private Parity parity = defaultParity;
private StopBits stopBits = defaultStopBits;
私有字符串portName = defaultPortName;
// ASCII是调制解调器通信等的默认编码。
private编码= System.Text.Encoding.ASCII;
私人解码器解码器= 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 receiveBytesThreshold = defaultReceivedBytesThreshold;
private bool throwsNull = defaultDiscardNull;
private bool dtrEnable = defaultDtrEnable;
private bool rtsEnable = defaultRtsEnable;
专用字节parityReplace = defaultParityReplace;
私有字符串newLine = defaultNewLine;
private int readBufferSize = defaultReadBufferSize;
private int writeBufferSize = defaultWriteBufferSize;


If creating a serial port with the default constructor or parameterless constructor, the port is given default values. 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.

There are several constructors

When using a constructor with parameters:
Are the attributes that are not within the parameters of the constructor of the serial port given the same default values when using a constructor with parameters and when using the default constructor?

The problem in this question, the interesting answers, comments and subsequent chat discussion let me to ask this.

解决方案

You can take a look at its source code and see constructors and filed definitions.

You will see all important properties including PortName, BaudRate, DataBits, Parity and StopBits have a default value which if they are not present in constructor arguments, the default value will be used for them.

Also some other important properties they have default values as well, while they are not present in constructors, however in some cases their default value may not be good.

For example for HandShake the default value is Handshake.None; while You may want to set it to Handshake.XOnXOff, Handshake.RequestToSend or Handshake.RequestToSendXOnXOff. For this particular property, you may want to refer to Hans's comments.

Take a look at constructors:

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;
}

And here are those fields and default value definitions:

// ---------- 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;

这篇关于未初始化的串行端口属性是否具有使用默认构造函数时的默认值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆