C#关键字operator

【C#】运算符重载(operator) 可重载预定义的 C# 运算符。也就是说,当一个或两个操作数都是某类型时,此类型可提供操作的自定义实现。使用 operator 关键字来声明运算符。 阅读详情
perator
operator 关键字用于在类或结构声明中声明运算符。运算符声明可以采用下列四种形式之一:

public static result-type operator unary-operator ( op-type operand )
public static result-type operator binary-operator ( op-type operand, op-type2 operand2 )
public static implicit operator conv-type-out ( conv-type-in operand )
public static explicit operator conv-type-out ( conv-type-in operand )
参数:

result-type 运算符的结果类型。
unary-operator 下列运算符之一:+ - ! ~ ++ — true false
op-type 第一个(或唯一一个)参数的类型。
operand 第一个(或唯一一个)参数的名称。
binary-operator 其中一个:+ - * / % & | ^ << >> == != > < >= <=
op-type2 第二个参数的类型。
operand2 第二个参数的名称。
conv-type-out 类型转换运算符的目标类型。
conv-type-in 类型转换运算符的输入类型。
注意:

前两种形式声明了用户定义的重载内置运算符的运算符。并非所有内置运算符都可以被重载(请参见可重载的运算符)。op-type 和 op-type2 中至少有一个必须是封闭类型(即运算符所属的类型,或理解为自定义的类型)。例如,这将防止重定义整数加法运算符。
后两种形式声明了转换运算符。conv-type-in 和 conv-type-out 中正好有一个必须是封闭类型(即,转换运算符只能从它的封闭类型转换为其他某个类型,或从其他某个类型转换为它的封闭类型)。
运算符只能采用值参数,不能采用 ref 或 out 参数。
C# 要求成对重载比较运算符。如果重载了==,则也必须重载!=,否则产生编译错误。同时,比较运算符必须返回bool类型的值,这是与其他算术运算符的根本区别。
C# 不允许重载=运算符,但如果重载例如+运算符,编译器会自动使用+运算符的重载来执行+=运算符的操作。
运算符重载的其实就是函数重载。首先通过指定的运算表达式调用对应的运算符函数,然后再将运算对象转化为运算符函数的实参,接着根据实参的类型来确定需要调用的函数的重载,这个过程是由编译器完成。
任何运算符声明的前面都可以有一个可选的属性(C# 编程指南)列表。

using System;
using System.Collections.Generic;
using System.Text;

namespace OperatorOverLoading
{
    class Program
    {
        static void Main(string[] args)
        {
            Student s1 = new Student(20, "Tom");
            Student s2 = new Student(18, "Jack");
            Student s3 = s1 + s2;

            s3.sayPlus();
            (s1 - s2).sayMinus();
            Console.ReadKey();
        }
    }
    public class Student
    {
        public Student() { }
        public Student(int age, string name)
        {
            this.name = name;
            this.age = age;

        }
        private string name;
        private int age;

        public void sayPlus()
        {
            System.Console.WriteLine("{0} 年龄之和为:{1}", this.name, this.age);

        }
        public void sayMinus() {
            System.Console.WriteLine("{0} 年龄之差为:{1}", this.name, this.age);
        }
        //覆盖“+”操作符
        public static Student operator +(Student s1, Student s2)
        {
            return new Student(s1.age + s2.age, s1.name + " And " + s2.name);

        }
        //覆盖“-”操作符
        public static Student operator -(Student s1, Student s2) {
            return new Student(Math.Abs(s1.age - s2.age), s1.name + "And" + s2.name);
        }

 

   }
}

利用adb命令高效管理手机蓝牙、热点与WiFi状态的实战指南 本文提供了一份利用adb命令高效管理安卓手机蓝牙、热点与WiFi状态的实战指南。针对移动测试与批量设备管理场景,详细讲解了通过adb命令查看与控制三大功能状态的核心方法,涵盖root与非root环境下的多种解决方案,旨在帮助工程师实现自动化运维,大幅提升工作效率。 阅读详情

相关推荐

Win11连接手机热点教程:轻松实现网络共享

通过本文的介绍,相信你已经掌握了如何在Windows 11系统上连接手机热点的方法。在连接过程中,如果遇到任何问题,可以按照本文提供的常见问题解决方法和优化建议进行排查和调整。手机热点功能为我们提供了便捷的互联网接入方式,无论是在外出办公、学习还是娱乐时,都能确保我们的设备保持在线状态。希望本文对你有所帮助,祝你使用愉快!

mmoo_python的博客 3325

[C#]C# 运算符(Operators)

运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。本文主要介绍C# 中的运算符(算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符)的使用,以及相关示例代码。

FL1768317420的博客 3388

Qt Location实战:5分钟搞定地图插件切换与卫星图源加载(附完整代码)

本文是Qt Location开发系列教程的实战指南,详细讲解如何在Qt应用中快速实现地图插件(如Esri、OSM、MapboxGL)的动态切换与卫星图源的加载。通过清晰的代码示例,帮助开发者理解插件机制,解决常见配置问题,并在5分钟内构建出具备交互式地图切换功能的应用程序。

kafka6courier的博客 524

c#操作符operate的用法

operate+ ,operate-的用法 ,看代码 /// </summary> public struct CorePoint { /// <summary> /// Initializes a new instance of CorePoint /// </summary> ...

sinat_31608641的博客 2226

松材线虫病害智能检测:基于YOLOv8的无人机航拍数据集构建与模型优化

本文探讨了基于YOLOv8的无人机航拍技术在松材线虫病害智能检测中的应用。通过构建高质量巡检数据集和优化模型架构(如RepVit主干网络和跨尺度特征融合模块),显著提升了病害识别准确率。该方案在复杂森林环境中表现出色,将检测效率提高数倍,为林业病害防控提供了高效解决方案。

vulkan6gpu的博客 994

计算机组成原理实验二 运算器组成实验

事实上,ALU的设计是在全加器的基础上,对全加器功能的扩展来实现符合要求的多种算术/逻辑运算的功能。为了实现多种功能的运算,An、Bn数据是不能直接与全加器相连接的,它们受到功能变量F3—F1的制约,因此,可由An、Bn数据和功能变量F3-F1组合成新的函数Xn 、Yn,然后,再将Xn 、Yn和下一位进位Cn-1通过全加器进行全加运算以实现所需的运算功能。AC寄存器可用来存储ALU的输入以实现两个操作数的运算操作,也可以用来存储来自ALU的结果,以将这些结果反馈给ALU以进行更多的处理。

qq_63574533的博客 1449

C#运算符重载----关键字operator

C#运算符重载----operator运算符重载的实现可重载和不可重载运算符实例原文链接 您可以重定义或重载**C#**中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字operator后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。 例如,请看下面的函数: public static Box operator+ (Box b, Box c) { Box box = new Box(); box.length =

天富儿的博客 1937

Prometheus安装部署说明

1. 安装Prometheus Server   Prometheus基于Golang编写,编译后的软件包,不依赖于任何的第三方依赖。用户只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启Prometheus Server。 1.1 下载并解压二进制安装包 通过Prometheus的官方网站:https://prometheus.io/download/,下载最新版本的Prometheus安装包 #下载、解压、创建软链接 cd /export/ wget https://githu..

m0_38100619的博客 5013

C# operator关键字

perator operator 关键字用于在类或结构声明中声明运算符。运算符声明可以采用下列四种形式之一: public static result-type operator unary-operator ( op-type operand ) public static result-type operator binary-operator ( op-type operand, op

caoming51021的专栏 850

5分钟搞定!用OpenCV实现全景图像柱面展开的保姆级教程(附完整代码)

本文提供了一份使用OpenCV实现全景图像柱面展开的详细教程。通过清晰的数学原理讲解和分步代码演示,指导读者快速掌握从等距柱状投影全景图到平面展开图的核心转换方法,并涵盖性能优化、参数调整及透视视图扩展等实用技巧,适合图像处理爱好者和开发者实践。

sony5的博客 573

基于AXI PCIE IP的FPGA PCIE卡示意图

如果在上图中的AXI互联IP上再连接一个带AXI Slave接口的BRAM控制器,这个BRAM控制器连接一个BRAM,Host PC在系统主存中分配了一些不连续的内存,Host PC可以将这些内存段的起始地址(当然要先转为PCIE总线地址)写到AXI总线上的BRAM中,这样AXI CDMA读取BRAM,将读取到的PCIE总线基地址写到AXIPCIE寄存器块中的AXIBAR2PCIEBAR_n寄存器中,这样就实现了SG DMA。通过动态改变AXIBAR2PCIEBAR_n寄存器的值,可以实现多通道DMA。

csdn_gddf102384398的博客 1624

为什么程序员下班后只关显示器从不关电脑?

人工智能学习路线+实战训练 https://edu.youkuaiyun.com/topic/ai30?utm_source=cxrs_bw 你下班时是不是只将显示器一关,揣上手机就走了? 曾有安保人员晚上来办公室巡查时问,为什么这些人不关机就下班呢? 作为程序员,你会心一笑。对方不明白如果关机了,第二天程序员上班可能会崩溃: 打开IDEA,并定位到昨天的代码,十分钟 打开Navic...

程序人生的博客 3万+

XCP实战系列介绍09-基于Vehicle Spy进行XCP测量步骤详解

详细介绍如何使用Vehicle Spy进行XCP测量

initiallizer的博客 1391

Android kotlin 跳转手机热点开关页面和判断热点是否打开

网上方法比较多,我这边使用了通过WifiManager 拿反射的getWifiApState方法获取判断,亲测可用,最近迷上了扩展方法【dog】跳转手机热点的页面肯定是用intent,重点是action不知道是什么,网上最常见的就是。跳转wifi设置页面,费了一番力气,同样写为扩展方法。

我怀里的猫的博客 2419

UFS软件分区介绍

本文主要介绍了ufs软件分区管理的概况,能够使大家对软件分区有个大体的认识

肥匪斐's blogs 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

win10不下载开热点的软件来开启无线热点

win10下是可以在命令行下开启无线网络热点的,具体操作如下: 按windows键(左alt键的左边那个有小窗子图标的键),输入cmd,然后右键出现的"命令提示符"应用, 以管理员身份打开,然后输入下面两条命令. netsh wlan set hostednetwork mode=allow ssid=hehe key=99887766 netsh wlan start hostednetwork...

caixiong的博客 2701

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 热点状态监听,Android便携式热点的开启状态检测和SSID的获取方法

WIFI热点的开启状态和开启后的SSID如何获取呢?打开WifiManager.java源码,可找到 getWifiApState() 方法,惊喜的发现直接调用这个方法就能获取到热点的状态,然而在调用的时候并不能调用到这个方法。。。这个方法被隐藏起来了,目前我是通过反射调用的。/*** Gets the Wi-Fi enabled state.* @return One of {@link #WI...

weixin_42390873的博客 937

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Android-wifi热点开关

工模测试过程中需要实现频繁的开启与关闭wifi热点,代码如下。

细嗅蔷薇 2249

android系统提供接口实现代码控制热点开关

设置中有控制热点的开关,并且有相关的类型和密码设置,但如何通过api在第三方app开发中控制呢?android 9.0的api为了安全,并不允许除systemuid之外的app控制热点, android 代码设置、打开wifi热点及热点的连接 以上blog也仅对android 5.1有效。 那只能通过系统提供对外接口,然后在设置中进行控制,接口形式为广播: Index: frameworks/base/services/core/java/com/android/server/am/BroadcastQue

通信侠的博客 1123

制作一个homeassistant开关

制作一个homeassistant开关   在智能家居时代,如果所有的设备都用手机来控制,也是挺麻烦的一件事情,毕竟最常用的控制方式是实体开关。因为实体开关来的更加的直接,直观,比如,当我们进入到一个房间,想控制一个设备,会自动的去按某个开关,而不是很麻烦的掏出手机,点亮屏幕,打开app,在繁多的设备中寻找到这个设备,最后再打开这个设备,一点也不优雅。   实体按键是最不假思索的一种方式,甚至可以盲操作。我遇到一个比较尴尬的境地是,开车的时候给别人回信息,恰逢人多车多的时候,需要聚精会神的看路而不是看手机,

尚恩树莓派电子的博客 6891

esp8266怎么连接手机热点+使用网络服务将引脚状态显示出来

让电脑也连接上手机热点,可以cmd命令行加ping ip 连接的IP地址连接成功,手机上也可以查看。1.esp8266连接自己手机热点,即无线终端模式,未考虑其他层面,如果不显示按一下esp8266上面的黑色复位按钮(RST)2.esp8266的接入点模式,即自己作为“热点”,D3引脚和FLASH按钮相连,所以会出现变化。最后理解一下代码,建议使用Deekseek。3.通过网络服务器将D3引脚状态显示出来(主要学习一些简单例子,理解一下基础代码。串口结果(记得按复位按钮)

2301_80387955的博客 969

台式电脑脑计算机没法启动怎么办,电脑开不了热点怎么办

电脑开不了热点怎么办电脑由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。那么,电脑开不了热点怎么办呢?以下是小编精心整理的电脑开不了热点的相关内容,欢迎大家借鉴与参考,希望对大家有所帮助。一、WiFi无法开启热点1、你可能没有开启WiFi硬件功能,可以试试找笔记本有没有自带wifi开关,或者f快捷键里有没有wifi开启快捷键。也可以尝试按键win(开始键)+x。基本能开启wifi。2...

weixin_39585974的博客 920

有关热点图

如果我们记录用户的点击或者鼠标的移动,并且绘制成热点图,生成的结果可以帮助我们分析和改良UI。 用于分析网站UI友好性的点击热点图可以这么来做: 最简单的方式是记录页面地址,鼠标相当于页面左上角的X和Y。 然后从我们的网页截图,把热点绘制在这个图上。 但是这种热点图的缺点是不能考虑多种用户状态或者说页面状态给页面带来布局的变化。 改良方法是记录页面地址,页面状态(比如是否登录),以及X和...

weixin_30578677的博客 94

查看程序运行热点(perf)

主要介绍一个定位程序热点的工具:perf。 性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。假如一个程序 90% 的时间都花费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo() 的上下文中。运气不可捉摸,但我想只要采样频率足...

imyangjianwei的专栏 4568

火焰图定位CPU热点函数调用栈

火焰图通过采样调用栈可视化CPU热点,帮助快速定位性能瓶颈。基于perf或eBPF采集数据,结合栈回溯与函数名映射,生成直观的调用路径图,广泛用于C++、Java、Go等语言的性能分析,支持生产环境低开销观测。

weixin_42593549的博客 379

基于状态机实现WIFI模组物联网

如果成功的话就连接热点,如果失败就返回AT通信检查,如果AT通信检查还是失败就放回硬件复位这个状态,如果热点链接成功,就连接MQTT指令,如果失败就返回AT通信检查,如果成功就连接云平台通信,如果失败就返回AT通信检查这个状态。在这个过程中使用的是连接固定的热点,后续会连接可变动的WIFI热点,注上面的状态图是基于固定的WIFI热点连接的状态图形。注:这个指令是用于设置WIFI的工作模式,该指令表示的原因是设置WIFI的工作指令为客户端的工作模式。ATE 表示的是开启和关闭回显。5.0 模组初始化命令集。

qq_45973003的博客 2498
上一篇: C# - 使用operator关键字实现操作符重载
下一篇: System.Threading.Timer使用心得
halon
博客等级 码龄15年 29粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值