-
c#实例 连接不上不上
-
Namespace这玩意就是用来方便管理的,而且在计算机中相同的设计思想到处可见,比如同一个文件夹下不同有同名的文件,你放在不同文件夹下可以有同名文件。其他编程语言比如Java有包路径,不同路径名字可以有同名的类。这种思想方便管理文件/代码。namespace first_space{ class namespace_cl { }//比如这样,程序是会报错的 class namespace_cl { }}//但是你是下面的状态就不会报错namespace first_space{ class namespace_cl { }}namespace second_space{ class namespace_cl { }}到这有的人就开始有疑问了:如果是不同的文件或者想访问其他的空间怎么办呢?细心的已经发现了,就和Java的导包一样,C#使用using导入空间,在每个编程文件的最上面几行都是这样的引入,想要哪些空间的功能导入哪个。这时候又有人有疑问了,能不能修仙小说那样天外有天,天上还有天。能不能命名空间套命名空间,套套套,此处禁止套娃。答案是可以的,引入的时候:using namespaceone.namespacetwo 用英文符号.即可,跟Java包路径同理。预处理器从字面理解就是提前对信息进行处理。她确实也是这样的,她会根据你指定的条件,只编译满足条件的代码,不满足条件的代码不编译。既区分了软件版本,代码还在一块,管理方便。预处理指令是#开始的,且只能作为开头,一般指令单独占一行。都有哪些指令在这就不单独写了。在Unity中指令挺有用的,因为PC是键盘,Android事件是手势,用预处理提前写好不同端的不同实现代码(当然她们功能可能是一致的),打包发布的时候利人利己。异常哎呀,这个老四件套了:try、catch、finally 和 throwtry: 一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。catch: 程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。finally: finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。throw: 当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。反射通俗的讲就是可以访问一个类的所有属性和方法,且能够调用。有人提问了:随便写的public类不都是能任意访问调用的吗,这有什么区别?区别在于一个是正常写代码,你知道代码逻辑和内容,且都在你的掌控之内,当然能访问;而反射不同她能够访问你不清楚的类,比如三方框架你遇到这个框架里某个类某个方法没有对外开放,而你又需要使用,就可以用反射把她抛出来。优点:反射提高了程序的灵活性和扩展性。降低耦合性,提高自适应能力。它允许程序创建和控制任何类的对象,无需提前硬编码目标类。缺点:性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。属性总结一句话,和Java里实体的get/set方法一样的性质。委托使用关键字delegate来修饰,必须用new关键字来创建,且与某个特定方法关联。比较官方的说法:表示对具有特定参数列表和返回类型的方法的引用。通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。 委托还类似于其他一些语言中存在的“函数指针”概念。 与函数指针不同,委托是面向对象且类型安全的。按照自己的理解:委托就是包一个外壳,操作外壳就是调用壳内的内容。就好像老板让你板砖,你委托给另一个人让她板砖。这就是委托。委托中还能通过加减号来实现多个,称之为多播。只有相同类型的委托可以合并。使用场景:因刚需C#没什么实际经验,大家知道有什么好的实际应用环境吗委托示例://这个是声明个委托 delegate int NumberChanger(int n); static int num = 10; public static int AddNum(int p) { num += p; return num; } public static int MultNum(int q) { num *= q; return num; } static void Main(string[] args) { // 创建委托实例 NumberChanger nc; NumberChanger nc1 = new NumberChanger(AddNum); NumberChanger nc2 = new NumberChanger(MultNum); // 使用委托对象调用方法 nc1(25); Console.WriteLine("Value of Num: {0}", num); nc2(5); Console.WriteLine("Value of Num: {0}", num); //下面是组播 使用 +或- 符号操作 nc = nc1; nc += nc2; // 调用多播 nc(5); Console.WriteLine("Value of Num: {0}", num); Console.ReadKey(); //输出结果为: //Value of Num: 35 //Value of Num: 175 //Value of Num: 75}
-
试验准备:1、树莓派3B,接近开关一个,发光三极管一个。2、安装了Windows IoT 系统,Windows 10 + Visual Studio 2022开发环境接线图试验要完成的任务:当接近开关靠近金属物体时,主动通知,亮起三极管的灯。当接近开关远离金属物,随即三极管熄灭。1、创建一个类ProximitySwitch,用来实现对接近开关引脚监听,引脚电平变化时做出反应,这里用一个回调方法实现。定义一个GpioPin的控制监听对象。一个回调方法。 /// <summary> /// 监听控制 /// </summary> private GpioPin _ListenPin; /// <summary> /// 监听结果回调 /// </summary> private Action<GpioPinValue> _PinValueChanged;初始化接近开关的引脚对象,并设定回调方法 /// <summary> /// 初始化引脚 /// </summary> /// <param name="pin">引脚编号</param> /// <param name="mode">工作模式</param> /// <param name="value">初始值</param> void Init(int pin, GpioPinDriveMode mode, GpioPinValue value) { var gpio = GpioController.GetDefault(); _ListenPin = gpio.OpenPin(pin); _ListenPin.SetDriveMode(mode); _ListenPin.Write(value); _ListenPin.ValueChanged += Pin_ValueChanged; } private void Pin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args) { _PinValueChanged(sender.Read()); }2、再创建一个控制引脚输出的类PinSetting,类负责初始化一个引脚,并提供写入高低电平 public class PinSetting { GpioPin _Pin; public PinSetting(int pin) { var gpio = GpioController.GetDefault(); _Pin = gpio.OpenPin(pin); _Pin.SetDriveMode(GpioPinDriveMode.Output); } /// <summary> /// 执行写入 /// </summary> /// <param name="value"></param> public void WritePin(GpioPinValue value) { _Pin.Write(value); } }3、测试一下,这里是通过一个uwp点page上button出发 PinSetting pin; ProximitySwitch proximity; private async void Button_Click(object sender, RoutedEventArgs e) { pin = new PinSetting(27); proximity = new ProximitySwitch(6); proximity.StartListen(v => { pin.WritePin(v);//通过监听结果回调触发 }); }最终效果
-
Namespace这玩意就是用来方便管理的,而且在计算机中相同的设计思想到处可见,比如同一个文件夹下不同有同名的文件,你放在不同文件夹下可以有同名文件。其他编程语言比如Java有包路径,不同路径名字可以有同名的类。这种思想方便管理文件/代码。namespace first_space{ class namespace_cl { }//比如这样,程序是会报错的 class namespace_cl { }}//但是你是下面的状态就不会报错namespace first_space{ class namespace_cl { }}namespace second_space{ class namespace_cl { }}到这有的人就开始有疑问了:如果是不同的文件或者想访问其他的空间怎么办呢?细心的已经发现了,就和Java的导包一样,C#使用using导入空间,在每个编程文件的最上面几行都是这样的引入,想要哪些空间的功能导入哪个。这时候又有人有疑问了,能不能修仙小说那样天外有天,天上还有天。能不能命名空间套命名空间,套套套,此处禁止套娃。答案是可以的,引入的时候:using namespaceone.namespacetwo 用英文符号.即可,跟Java包路径同理。预处理器从字面理解就是提前对信息进行处理。她确实也是这样的,她会根据你指定的条件,只编译满足条件的代码,不满足条件的代码不编译。既区分了软件版本,代码还在一块,管理方便。预处理指令是#开始的,且只能作为开头,一般指令单独占一行。都有哪些指令在这就不单独写了。在Unity中指令挺有用的,因为PC是键盘,Android事件是手势,用预处理提前写好不同端的不同实现代码(当然她们功能可能是一致的),打包发布的时候利人利己。异常哎呀,这个老四件套了:try、catch、finally 和 throwtry: 一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。catch: 程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。finally: finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。throw: 当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。反射通俗的讲就是可以访问一个类的所有属性和方法,且能够调用。有人提问了:随便写的public类不都是能任意访问调用的吗,这有什么区别?区别在于一个是正常写代码,你知道代码逻辑和内容,且都在你的掌控之内,当然能访问;而反射不同她能够访问你不清楚的类,比如三方框架你遇到这个框架里某个类某个方法没有对外开放,而你又需要使用,就可以用反射把她抛出来。优点:反射提高了程序的灵活性和扩展性。降低耦合性,提高自适应能力。它允许程序创建和控制任何类的对象,无需提前硬编码目标类。缺点:性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。属性总结一句话,和Java里实体的get/set方法一样的性质。委托使用关键字delegate来修饰,必须用new关键字来创建,且与某个特定方法关联。比较官方的说法:表示对具有特定参数列表和返回类型的方法的引用。通过委托,可以将方法视为可分配给变量并可作为参数传递的实体。 委托还类似于其他一些语言中存在的“函数指针”概念。 与函数指针不同,委托是面向对象且类型安全的。按照自己的理解:委托就是包一个外壳,操作外壳就是调用壳内的内容。就好像老板让你板砖,你委托给另一个人让她板砖。这就是委托。委托中还能通过加减号来实现多个,称之为多播。只有相同类型的委托可以合并。使用场景:因刚需C#没什么实际经验,大家知道有什么好的实际应用环境吗委托示例://这个是声明个委托 delegate int NumberChanger(int n); static int num = 10; public static int AddNum(int p) { num += p; return num; } public static int MultNum(int q) { num *= q; return num; } static void Main(string[] args) { // 创建委托实例 NumberChanger nc; NumberChanger nc1 = new NumberChanger(AddNum); NumberChanger nc2 = new NumberChanger(MultNum); // 使用委托对象调用方法 nc1(25); Console.WriteLine("Value of Num: {0}", num); nc2(5); Console.WriteLine("Value of Num: {0}", num); //下面是组播 使用 +或- 符号操作 nc = nc1; nc += nc2; // 调用多播 nc(5); Console.WriteLine("Value of Num: {0}", num); Console.ReadKey(); //输出结果为: //Value of Num: 35 //Value of Num: 175 //Value of Num: 75}
-
基础连接已经关闭: 发送时发生错误。
-
C#WebApi同一个接口同一个会话会调用多次,如何判断是否是会话重复请求
-
一、.net core 3.1安装 参考链接:https://bbs.huaweicloud.com/forum/thread-75530-1-1.html。 感谢天府的兄弟!!1、安装依赖l 更新libstdc++.so.6(/usr/lib64目录下默认的libstdc++.so.6只包含GLIBC版本无法满足.NET Core SDK 3.1的运行。) cd /usr/lib64mv libstdc++.so.6 libstdc++.so.6.bakwget https://obs-mirror-ftp4.obs.cn-north-4.myhuaweicloud.com/libstdc++.so.6l 安装ICU1)下载源码git clone https://gitee.com/penjun71/icu.gitgit checkout release-59-2 -b release592)编译安装cd icu4c/source/./configure --prefix=/usr/local/icumakemake install3)修改环境变量vi /etc/profileexport PATH=/usr/local/icu/bin:$PATHsource /etc/profile4)执行icuinfo 会出现部分so库无法找到问题。根据报错添加软链接或者把对应文件拷贝进去。常见问题:icuinfo: error while loading shared libraries: libicuuc.so.68: cannot open shared object file: No such file or directory解决方案:ln –s xx/ libicuuc.so.68 /lib64/ libicuuc.so.682、安装.net core sdk 1)下载源码 wget https://download.visualstudio.microsoft.com/download/pr/8c39349a-23d0-46b0-8206-8b573a404709/b42fd441c1911acc90aaddaa58d7103f/dotnet-sdk-3.1.401-linux-arm64.tar.gz 2)解压到/usr/local/dotnet/ mkdir /usr/local/dotnet/ tar zxvf dotnet-sdk-3.1.401-linux-arm64.tar.gz -C /usr/local/dotnet 3)配置环境变量 vi /etc/profile export PATH=/usr/local/icu/bin:/usr/local/dotnet:$PATH source /etc/profile 4)查看版本 dotnet --version二、vs编译发布选择目标框架.net core,编译发布成linux-arm版本,执行dotnet xx.dll 即可在鲲鹏上运行。三、安装配置守护进程(Supervisor)将应用配置成进程,否则shell关闭应用会自动停止。安装Supervisoryum install python-setuptoolseasy_install supervisor配置Supervisormkdir /etc/supervisorecho_supervisord_conf > /etc/supervisor/supervisord.conf修改supervisord.conf文件在文件结尾[include]节点处把;[include];files = relative/directory/*.ini修改成[include]files=conf.d/*.conf #设置配置文件路径创建目录conf.d,在目录下创建文件TeaWebServer.conf[program:TeaWebServer]command=dotnet TeaWebServer.dlldirectory=/root/dotnet/PublishOutput # TeaWebServer.dll 所在位置路径autorestart=true #进程意外终止是否自动重启stderr_logfile=/var/log/TestDotNetCoreWeb.err.log #日志文件stdout_logfile=/var/log/TestDotNetCoreWeb.out.log #日志文件user=rootstopsignal=INT[supervisord][supervisorctl]:wq 保存退出运行supervisord并查看进程是否生效supervisord -c /etc/supervisor/supervisord.confps -ef | grep TeaWebServer常见问题:1、Error: Another program is already listening on a port that one of our HTTP servers is configured to xxxx解决方法:# find / -name supervisor.sock /tmp/supervisor.sock# unlink /tmp/supervisor.sock2、Error: .ini file does not include supervisord section这是因为配置文件中必须有[supervisord],[supervisorctl]有这两个基本模块,默认创建的配置文件中不包含。在配置文件中加上即可。
-
【功能模块】C# 写的后端,如何调用 内容审核【操作步骤&问题现象】1、SDK中没有C的版本,请问下程序使用C#构建的如何调用 “内容审核”2、【截图信息】
-
【功能模块】C#多线程调用OCR通用文字识别,通过Token请求【操作步骤&问题现象】1、C#多线程调用API,连续执行到第四五十次的时候会抛异常,异常信息:操作超时。2、设置System.Net.ServicePointManager.DefaultConnectionLimit的值大于4之后,在GetResponse()的位置抛异常。异常信息远程服务器返回错误:(429)Too Many Requests。【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
将原.net framework4.6.1文件及代码导入到.net core 3应用以后,无法获取token,具体在HWOcrClientToken.cs中GetHttpToken()函数无响应。请添加.net core sdk示例,否则应用无法在linux环境下部署,谢谢。另示例sdk在.net framework4.8下也无法正确运行。
-
SDK V200R002C00SPC617 C# Demo匹配SDK V200R002C00SPC616版本SDK库,人脸抓拍无法抓拍问题,具体解决办法为:1. 将SDK.cs文件中LPPU_REAL_PLAY_INFO_S结构体的stStartTime参数类型由PU_TIME_S修改为PU_TIME,stEndTime同理(SDK.cs中第1287、1288行)。2. 将SDK.cs文件中LPPU_REAL_PLAY_INFO_S结构体的szReserved参数的类型由string修改为byte[](SDK.cs中第1292行)。3. 将SDK.cs文件中LPPU_REAL_PLAY_INFO_S结构体的szReserved参数的UnmanagedType属性由ByValTStr修改为ByValArray(SDK.cs中第1291行)。4. 将SDKAccessIntelligent.cs文件中StartFaceSnap方法的real_info_s.szReserved值初始化(new byte[32])后将第22位赋值为1(SDKAccessIntelligent.cs中第103行)。
上滑加载中
推荐直播
-
GaussDB管理平台TPOPS,DBA高效运维的一站式解决方案
2024/12/24 周二 16:30-18:00
Leo 华为云数据库DTSE技术布道师
数据库的复杂运维,是否让你感到头疼不已?今天,华为云GaussDB管理平台将彻底来改观!本期直播,我们将深入探索GaussDB管理平台的TPOPS功能,带你感受一键式部署安装的便捷,和智能化运维管理的高效,让复杂的运维、管理变得简单,让简单变得可靠。
回顾中 -
DTT年度收官盛典:华为开发者空间大咖汇,共探云端开发创新
2025/01/08 周三 16:30-18:00
Yawei 华为云开发工具和效率首席专家 Edwin 华为开发者空间产品总监
数字化转型进程持续加速,驱动着技术革新发展,华为开发者空间如何巧妙整合鸿蒙、昇腾、鲲鹏等核心资源,打破平台间的壁垒,实现跨平台协同?在科技迅猛发展的今天,开发者们如何迅速把握机遇,实现高效、创新的技术突破?DTT 年度收官盛典,将与大家共同探索华为开发者空间的创新奥秘。
回顾中
热门标签