未初始化的串行端口属性是否像使用默认构造函数时一样给出默认值?

2023-12-20

如果使用默认构造函数或无参数构造函数创建串行端口,则会为该端口指定默认值。从文档中 https://msdn.microsoft.com/en-us/library/s14dyf47(v=vs.110).aspx:

// Create a new SerialPort object with default settings.
_serialPort = new SerialPort();

当未指定任何属性值时,此构造函数使用默认属性值。例如,DataBits 属性默认为 8,Parity 属性默认为 None 枚举值,StopBits 属性默认为 1,默认端口名称为 COM1。

几个构造函数 https://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx

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

问题在这个问题 https://stackoverflow.com/questions/39294081/serial-port-communication-on-the-same-windows-machine-not-working,有趣的答案、评论和随后的聊天讨论让我提出了这个问题。


你可以看一下它的源代码 http://referencesource.microsoft.com/#System/sys/system/io/ports/SerialPort.cs,0288da67ff57609d并查看构造函数和归档定义。

您将看到所有重要的属性,包括PortName, BaudRate, DataBits, Parity and StopBits有一个默认值,如果它们不存在于构造函数参数中,则将使用默认值。

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

例如对于HandShake默认值为Handshake.None;而您可能想将其设置为Handshake.XOnXOff, Handshake.RequestToSend or Handshake.RequestToSendXOnXOff。对于这个特定的属性,您可能需要参考 Hans 的comments https://stackoverflow.com/questions/39297839/are-uninitialised-serial-port-attributes-given-default-values-as-they-are-when-u#comment98625879_39297839.

看一下构造函数:

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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未初始化的串行端口属性是否像使用默认构造函数时一样给出默认值? 的相关文章

  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • .NET 中是否有内置函数可以对密码进行哈希处理?

    我看到这个问题加密 散列数据库中的纯文本密码 https stackoverflow com questions 287517 encrypting hashing plain text passwords in database 我知道我
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • Celery / RabbitMQ - 找出 No Acks - 未确认的消息

    我正在尝试找出如何获取有关未确认消息的信息 这些存储在哪里 在使用 celery 检查时 似乎一旦消息得到确认 它就会处理完毕 并且您可以跟踪状态 假设您有一个结果后端 那么您可以看到它的结果 但从你应用延迟的那一刻起 直到它被承认它处于黑
  • 匿名方法作为函数结果

    我想要做的是将作为函数结果获得的匿名方法分配给相同类型的变量 Delphi 抱怨无法完成任务 显然 Delphi 的事情我想分配 GetListener 函数而不是同一函数的结果 非常感谢对此的任何帮助 type TPropertyChan
  • 如何仅对筛选数据/可见单元格应用 vlookup 公式

    我已经过滤了 A 列 我需要对 A 列中的可见单元格应用 vlookup 公式 我如何在 vba 中实现这一目标 工作表中的总行数为 30 000 过滤后的行数接近 100 您无需 VBA 只需使用 Excel 数组公式即可解决此问题 但如
  • 用 R 进行向量思考

    我知道 R 处理向量的效率最高 应该避免循环 我很难自学以这种方式实际编写代码 我想要一些关于如何 矢量化 我的代码的想法 下面是为 10 000 个非唯一状态组合创建 10 年样本数据的示例 st 计划1 p1 和计划2 p2 st lt
  • 动画边距底部 Silverlight

    我目前正在处理动画 我有一个隐藏搜索面板的网格 单击搜索按钮会将网格向下移动以显示搜索选项 我让这部分工作的问题是网格视图占用了所有可用空间 因此当搜索栏隐藏时它看起来很好 但如果搜索栏可见 那么网格底部就会离开页面 我一直在尝试使用边距来
  • 403 禁止网络根目录中的符号链接

    我位于 LAMP 堆栈上的共享托管包上 没有 shell 访问权限 我可以使用 PHP 创建符号链接symlink 功能 假设我的网络根目录是 home www user1 public 假设我有一个名为的真实目录 home www use
  • 使用 CircleCI 进行 Selen 测试

    我正在使用 CircleCI 我想运行 Huxley 测试 但为此我需要运行硒服务器 我试图运行 selenium 服务器独立 jar 那不是解决方案 如果您知道的话请帮忙 大多数浏览器测试框架都会为您提供 Selenium 如果您需要运行
  • CSS 浮点逻辑

    我创建了 25 个随机宽度和高度的盒子 其中width height 如图所示 document ready function e for var count 0 count lt 5 count for var iter 0 iter l
  • 数据库设计:1 个表还是 2 个表?

    我见过一些数据库设计 其中帐户表中包含所有用户信息 包括密码 电子邮件 出生日期 名字 姓氏等 我见过其他一些有两张桌子的 用户名 或电子邮件 密码 状态 激活等 组 管理员 所有者 用户等 and 名字 姓氏 出生日期 出生月份 出生年份
  • gcc - 属性 nothrow 有何用途?

    我查看了一些 gcc 属性列表 发现了这个引起了我的注意 nothrow The nothrow attribute is used to inform the compiler that a function cannot throw a
  • Laravel Eloquent 模型根据字段值为 null 或现有的情况进行更新

    我正在尝试像这样更新 Laravel Eloquent 模型 Res Reservations where time id time id gt where date bus date gt where valid config confi
  • 测试 getchar() == EOF 未按预期工作

    我有一个作业 编写一个允许用户输入最多 20 个整数的 C 程序 它将根据哨兵值或达到 20 个整数限制而停止接受数字 然后该程序应该显示这些数字以与输入相反的顺序 我决定将我的哨兵值设为 EOF 或 CTRL D CRTL Z 我的代码有
  • 如何设置文本框中的最大长度为 6 和最小长度为 6? [复制]

    这个问题在这里已经有答案了 考虑
  • 无法“git 推送”。 “Heroku Git 错误”已经持续 4 天了

    正如标题中所述 我无法推送到我的应用程序之一 git Push 到其他应用程序工作正常 因此凭据 密钥设置没问题 错误信息 git push app remote Heroku Git error please try again shor
  • 如何使用 UserDefaults 保存 UIColor? [复制]

    这个问题在这里已经有答案了 我正在尝试对我的代码进行编程 以便如果用户按下夜间按钮 背景将变黑 并在用户关闭应用程序时保持黑色 白天模式也是如此 请注意 我已经对按钮进行了编码 当他们按下它时 所有场景都会更改为该模式 这是我的代码 我需要
  • SQL - 如何根据现有数据集中的日期范围生成每个月的行?

    假设我有一个数据集 rowID dateStart dateEnd Year Month 121 2013 10 03 2013 12 03 NULL NULL 143 2013 12 11 2014 03 11 NULL NULL 322
  • 如何取消或停止 NSThread?

    我正在做一个应用程序 在读取 XML 文件时使用 NSThread 加载 viewControllers 的内容 我已经完成如下 void viewDidAppear BOOL animated Some code NSThread det
  • Android - Google 地图 API v2 - SupportMapFragment 错误

    我正在尝试第一次使用 Google Maps API v2 恢复并运行我的一个应用程序 我在密钥库中为我的应用程序创建了一个密钥 提取了 SHA1 哈希值 获取了 API 密钥 然后在应用程序内执行了以下操作 我包括 谷歌播放服务 jar
  • 在react三元运算符中使用AND语句(两个条件)

    下面是一个内联 if 与逻辑 运算符 它渲染一个组件 ifthis state isHidden是假的 div this state isHidden div
  • 未初始化的串行端口属性是否像使用默认构造函数时一样给出默认值?

    如果使用默认构造函数或无参数构造函数创建串行端口 则会为该端口指定默认值 从文档中 https msdn microsoft com en us library s14dyf47 v vs 110 aspx Create a new Ser