自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1663)
  • 收藏
  • 关注

原创 C#中泛型<T>(特殊的占位符)的使用详解

泛型(Generic),是将不确定的类型预先定义下来的一种C#高级语法,我们在使用一个类,接口或者方法前,不知道用户将来传什么类型,或者我们写的类,接口或方法相同的代码可以服务不同的类型,就可以定义为泛型。这会大大简化我们的代码结构,同时让后期维护变得容易。泛型很适用于集合,我们常见的泛型集合有:List<T>,Dictionary<K,V>等等(T,K,V就代表不确定的类型,它是一种类型占位符),无一不是利用的泛型这一特性,若没有泛型,我们会多出很多重载方法,以解决类型不同,但是执行逻辑相同的情况。

2024-04-29 20:54:44 1633 1

原创 C#中委托和事件的区别详解

事件可以被看作一个委托类型的变量,通过事件注册、取消多个委托或方法。○ 在CLR运行时,委托DoSth实际上就一个类,该类有一个参数类型为方法的构造函数,并且提供了一个Invoke实例方法,用来触发委托的执行。○ 触发委托有2种方式: 委托实例.Invoke(参数列表),委托实例(参数列表)以上,通过+=为事件注册1个或多个委托实例,实际上,还可以为事件直接注册方法。○ 委托就是一个类,也可以实例化,通过委托的构造函数来把方法赋值给委托实例。而实际上,委托变量(参数列表),事件就是采用这种形式执行方法的。

2024-04-29 20:47:39 1396

原创 c#中泛型方法的声明及定义实例(3)

/ 此委托封装的方法的参数类型。即可以使用指定的类型或派生程度更低的类型。有关协变和逆变的更多信息,请参见泛型中的协变和逆变。这样就可以使用一个带T泛型但无参数的泛型委托了,类似与Action的封装但是可以不带T类型的参数调用。//上面是自带封装好的Action,除其他重载的外这个参数形式是固定的。// 封装一个方法,该方法只有一个参数并且不返回值。注意:防止静态事件注册多个方法,这样会执行很多次实例中的函数。// 此委托封装的方法的参数。//使用实例时必须要有参数。

2024-04-29 20:44:37 128

原创 c#中泛型方法的声明及定义实例(2)

/************************************ 泛型方法声明定义及使用。//自定义委托,可替代Action和Func(Action和Func实质上是封装好的委托)//将委托封装成事件来注册,则可以一个事件注册多个同类型方法(事件执行将调用全部已注册过的方法)//泛型声明的时候是T,定义实例的时候需要填具体的参数类型(而不是T或T1,T2)

2024-04-28 21:50:36 521

原创 c#中泛型方法的使用实例

如果定义采用相同类型参数作为包含类的泛型方法,编译器将生成警告 CS0693,因为在方法范围内为内部 T 提供的参数隐藏了为外部 T 提供的参数。如果需要使用其他类型参数(而不是实例化类时提供的类型参数)来灵活地调用泛型类方法,请考虑为方法的类型参数提供另一个标识符,如下面示例的 GenericList2<T> 中所示。定义一个泛型类指的是,定义一个类,这个类中某些字段的类型是不确定的,这些类型可以在构造的时候确定下来。//实现了任意类型组拼成字符串的方法,可以是int,double,string等类型。

2024-04-28 20:47:47 374

原创 C#中泛型方法的定义及使用方法

其中where子句为可选约束语句,T:后面的Test为指定类型,new ():函数主体要使用T类型实例化时必须加此参数,否则编译不通过。当具有自己的类型参数的成员函数需要将该参数约束为包含类型的类型参数时,裸类型约束很有用。/***************************************C# 定义泛型方法。在使用泛型后,方法中的数据类型则有指定的泛型来约束,即可以根据提供的泛型来传递不同类型的参数。为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。

2024-04-28 20:31:07 1169

原创 C# 中泛型编程之泛型类、泛型方法、泛型约束详解

类型Type现在可以表示带有特定类型的实参(或绑定类型)或未指定类型的泛型(或称未绑定类型)。委托级别的约束只在声明委托变量和实例化委托时使用,类似于在类型和方法的作用范围中实施的其他任何约束。同时子类中的泛型方法不能重复基类泛型方法的约束,这一点和泛型类中的虚方法重写是有区别的,代码如下。////错误 重写和显式接口实现方法的约束是从基方法继承的,因此不能直接指定这些约束。类型参数必须具有无参数的公共构造函数。3.在子类重复基类的约束(在使用子类泛型参数时,必须在子类级别重复在基类级别规定的任何约束)

2024-04-28 20:19:05 2374

原创 c#中自定义泛型委托实现Action和Func的实例比较及lambda表达式写法

/自定义委托,可替代Action和Func(Action和Func实质上是封装好的委托)//将委托封装成事件来注册,则可以一个事件注册多个同类型方法(事件执行将调用全部已注册过的方法)//泛型声明的时候是T,定义实例的时候需要填具体的参数类型(而不是T或T1,T2)//自定义委托(Action和Func实质上是封装好的委托)//Action和Func实质上是封装好的委托。

2024-04-27 18:18:45 404

原创 C#中Func与Action的理解及其lambda表达式的写法

委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储、传递,之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托。这些泛型委托分为Func、Action中,它们借助于泛型特性,可以替代C#中几乎所有的委托类型,也就是说一般情况下,在我们的程序中不必再声明任何新的委托类型,就可以包装所有的函数了。//********************************lambda表达式的写法示例。

2024-04-27 17:59:01 2363

原创 C# 中匿名方法实例详解

我们已经提到过,委托是用于引用与其具有相同标签的方法。换句话说,您可以使用委托对象调用可由委托引用的方法。提供了一种传递代码块作为委托参数的技术。匿名方法是没有名称只有主体的方法。在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。

2024-04-27 12:14:00 586

原创 C#中泛型的概念详解

什么是泛型?C# 语言和公共语言运行时 (CLR) 在 2.0 版本中添加了泛型。泛型将类型参数的概念引入 .NET Framework,这样就可以设计具有相同特征的类和方法:在客户端代码声明并初始化这些类和方法之前,这些类和方法会延迟指定一个或多个类型(使用占位符~3:数字代表类型参数个数)。泛型有什么用?使用泛型类型可以最大限度地重用代码、保护类型安全性以及提高性能。泛型最常见的用途是创建集合类 List<int>。可以创建:泛型接口、泛型类、泛型方法、泛型事件和泛型委托。泛型约束有哪些?

2024-04-27 12:13:04 2749

原创 C#泛型委托事件详解及实例

// 泛型委托的构造类型:需要一个形参为int类型、返回值类型为bool类型的方法对其进行初始化/// 泛型委托的构造类型:需要一个形参为string类型、返回值类型为int类型的方法对齐进行初始化.NET给我们预定义了很多泛型委托,日常编码工作中使用这些类型的泛型委托基本就已足够,下面我们只介绍三个常用的预定义的泛型委托。

2024-04-27 12:07:37 1037

原创 C#中一个方法的Lambda表达式(实质上是一个委托)

不过,有时以一种非正式的方式谈论Lambda表达式的“类型”会很方便,在这些情况下,类型是指委托类型或Lambda表达式所转换到的Expression类型。根据主题不同,Lambda表达式可以分为表达式Lambda和语句Lambda。下面的示例使用包含三个组件的元组,将一系列数字传递给Lambda表达式,此表达式将每个值翻倍,然后返回包含乘法运算结果的元组(内含三个元组)。例如:Lambda表达式x => x * x,指定名为x的参数,并返回x的平方值,并将表达式x => x * x分配给委托类型的变量。

2024-04-27 12:01:58 1149

原创 C#中Action和Func的用法详解及实例

以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少。3:现在小明又改变主意了,我不仅要自己选择书籍,我还要在一个牛逼的书籍厂家买,有没有这种方式呢,那么告诉你有,Action<in T1,in T2>1:小明很是苦恼,我就是买一本书籍,每次都让我定义下,烦死了,有没有一种方法不去定义委托呢,那么有吗,还真有,就是我们今天讲的Action。

2024-04-27 11:50:13 2065

原创 winform继承窗体后子窗体不能使用设计器显示的问题解决

第二点:屏蔽掉父窗体类的控件初始化方法,即//InitializeComponent();与网上百度到的跟平台有关系啊什么的毫无作用,目前使用的是VS2019。如果有抽象类即将抽象类改为普通类,需要实现的抽象方法改为虚方法。winform继承窗体后子窗体不能使用设计器显示的问题。第三点:注意前两点修改完成后,关闭所有窗体,重新编译。第一点:继承的父窗体类不能使用抽象类。

2024-04-27 11:47:23 207

原创 原码反码补码的概念详解及转换方法实例

如果补码的首位是0,那它就表示一个正数,直接把二进制数转换为十进制数就行。例如:[x]补=00110010,因为(110010)2=50x的真值就是50。如果补码的首位是1,那它就表示一个负数,可以先-1算出它的反码,再根据反码写出原码。最后把符号位后面的二进制数转换为十进制数,前面加上“-”就行。例如:[x]补=10110010,则[x]反=10110001,[x]原=11001110(注意:符号位的1不参与取反不变)因为(1001110)2=78x的真值就是-78。

2024-04-27 11:45:35 8696 4

原创 C# 中利用NI VISA 库控制硬件设备采集实例

首先,http://www.ni.com/download/ni-visa-16.0/6184/en/建议您下载完整版的NI-VISA。-Session的子类 ,封装了 session 资源,Session子类的方法执行 session 资源对象 的具体操作,进入NI 官网,点击Support,根据设备类型选择下载,如果不是GBIP接口的仪表,可以像我一样,选择NI-VISA。/**********************C# winform使用NI-VISA驱动来控制IT6522数控电源。

2024-04-27 11:26:48 2156 1

原创 C# WinForm 绘制圆角窗体的方法实例

/ 左上角// 右上角// 右下角// 左下角。

2024-04-27 11:14:39 332

原创 c#中实体类和DataTable之间相互转换,实体反射动态遍历列详解

通过反射,你可以加载和检查程序集的信息,包括类型、成员、属性等。请注意,上述示例中的 Person 类只是一个示例,你可以根据自己的需求创建自定义的实体类,并根据 DataTable 的列名称和类型匹配属性。为了将列定义为可为空类型,我们使用了 typeof(object) 来定义列的类型,这样可以允许任意的对象,并且可以在需要时将其设置为 DBNull.Value 来表示空值。请注意,上述示例中的实体类 Person 只是一个示例,你可以根据自己的需求创建自定义的实体类,并使用相应的属性和类型。

2024-04-27 11:11:24 1169

原创 C#中操作快捷方式(获取快捷方式属性、创建快捷方式)的方法

右键“引用”,“添加引用”,选择“COM组件”,找到“Windows Script Host Object Model”,然后确定。13 // 设置快捷方式的图标,这里是取程序图标,如果希望指定一个ico文件,那么请写路径。10 shortcut.Description = "我的快捷方式--yeaicc";9 // 快捷方式描述,鼠标放到快捷方式上会显示出来哦。15 // 保存,创建就成功了。3 // 创建一个快捷方式。1 // 声明操作对象。5 // 关联的程序。11 // 全局热键。

2024-04-27 11:08:24 506

原创 C++ 与Qt之间的关系概述

Qt 提供了 C++ 库:Qt 提供了许多 C++ 库,如 Qt Core、Qt GUI、Qt Widgets、Qt QML 等,这些库可以帮助开发者更快速地创建 GUI 和应用程序。C++ 和 Qt 之间有着密切的关系。Qt 可以使用 C++ 的特性:Qt 可以使用 C++ 的所有特性,包括类、对象、继承、多态等。Qt 是用 C++ 编写的:Qt 的核心部分是用 C++ 编写的,因此,如果你熟悉 C++,那么学习 Qt 会更容易。C++标准库,是指C++自带的,一套完整的,支持各种常用功能的类和函数库。

2024-04-27 11:05:37 630

原创 形象的理解相位

相位描述信号波形变化的度量,通常以度 (角度)作为单位,也称作相角。当信号波形以周期的方式变化,波形循环一周即为360°。简谐运动中的相位差如果两个简谐运动的频率相等,其初相位分别是φ1,φ2。当φ2>φ1时,他们的相位差是△φ=(ωt+φ2)-(ωt+φ1)=φ2-φ1,此时我们常说2的相位比1超前△φ。如果没有相位噪声,那么振荡器的整个功率都应集中在频率f=fo处。但相位噪声的出现将振荡器的一部分功率扩展到相邻的频率中去,产生了边带。

2024-04-06 11:38:51 1445

原创 C++中用new和不使用new创建对象的区别实例详解

一般来说对于一个进程栈的大小远远小于堆的大小,在Window下,栈的大小是2MB,Linux下,默认栈空间大小为8MB。对于堆,比如32位系统最大不超过2G,而64位系统最大不超过4G,当需要分配一个非常大的内存时,请用new。栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。

2024-04-06 11:18:05 893

原创 C++ 与Qt之间的关系概念

Qt 提供了 C++ 库:Qt 提供了许多 C++ 库,如 Qt Core、Qt GUI、Qt Widgets、Qt QML 等,这些库可以帮助开发者更快速地创建 GUI 和应用程序。Qt 是一个用于开发 GUI 和应用程序的跨平台 C++ 库,它提供了许多功能和工具,可以帮助开发者创建高质量的桌面应用程序和移动应用程序。这意味着你可以使用 C++ 的语法和特性来编写 Qt 应用程序。Qt 是用 C++ 编写的:Qt 的核心部分是用 C++ 编写的,因此,如果你熟悉 C++,那么学习 Qt 会更容易。

2024-04-06 11:11:21 817

原创 C#调用QT编写的dll报“试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)“的原因及解决办法

2.C#的程序需要设定正确的平台和目标平台及项目配置,否则32位或64位的程序对应了错误位数的dll(有时可能需要多试几次平台和目标平台的不同组合配置才行,因为会出现编译器报错但输出的exe文件就能直接运行的问题)。D:\learn\Qt\Qt5.10.0\5.10.0\mingw53_32\bin 和 D:\learn\Qt\Qt5.10.0\Tools\mingw530_32\bin。1.qt编写的dll需要引用qt本身的库,需要引用编译库,所以需要在系统环境变量中加入如下。

2024-04-04 21:44:48 875

原创 QT中dll的生成及使用

C++中的库分为三种:静态库、动态库和导入库。

2024-04-04 19:32:09 1837

原创 Qt-生成dll和调用详细图文教程详解

2.6 在test.pro中包含testdll.dll 所在路径LIBS+=C:\Users\wang\Desktop\build-test-Desktop_Qt_5_8_0_MinGW_32bit-Debug\debug\DLL.dll。2.5将生成的DLL.dll,复制到build-test-Desktop_Qt_5_8_0_MinGW_32bit-Debug中的debug。2.2将上面生成的DLL.h和DLL_global.h拷贝到生成的test应用工程里面。2.7最后运行成功图。

2024-04-04 19:13:26 1231

原创 一组信号可以用一组复数表示吗?

假设采样频率为Fs,采样点数为N,做FFT之后,某一点n(n从1开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以N/2就是对应该频率下的信号的幅度(对于直流信号是除以N);该点的相位即是对应该频率下的信号的相位。相位的计算可用函数atan2(b,a)计算。atan2(b,a)是求坐标为(a,b)点的角度值,范围从-pi到pi。要精确到xHz,则需要采样长度为1/x秒的信号,并做FFT。要提高频率分辨率,就需要增加采样点数,这在一些实际的应用中是不现实的,需要在较短的时间内完成分析。

2024-03-28 09:12:52 1015

原创 一个复数是否代表一个正弦波

中所有的正弦量频率相等,所以可以不考虑频率的计算,这样正弦量三要素转化为两个要素的分析,即最大值和初相位,此时,运用数学变换的思想,将正弦的三角函数计算转化为复数的计算,所以将正弦量转化为对应的复数表示。所以相量法分析的前提是同频,注意是相量,不是向量,这也是电路的严格。时,因为三角函数的计算非常复杂,所以人们需要找到方便的分析方法。正弦电压本身是正弦的,并不是复数,所以不能认为正弦等于复数。,表达了正弦量并不是复数,只是计算中的变换。表示,只是计算中的一种。

2024-03-27 18:12:08 167

原创 复数的物理意义详解

我们知道, i 的平方是 -1, 那么2 * i * i = -2,相当于在数轴上将 2 旋转了 180度。也就是说,通过旋转,我们获得了一个垂直的虚数轴。实数轴和虚数轴共同构成了一个复数的平面,也称为复平面。欧拉公司的关键作用,就是将正弦波统一成了简单的指数形式。我们再来看上面的图,欧拉公式所描绘的,是一个随时间变化,在复平面上做圆周运动的点。随着时间的改变,在时间轴上就变成了一条螺旋线。如果只看它的实数部分,也就是螺旋线左侧的投影,就是基础的余弦函数。对于复数,最直观的理解,就是旋转!

2024-03-27 18:02:41 676

原创 复数与正弦波之间的意义

后来想了个办法,我不去表示这个信号的相位了,我把这个信号在这个频率下的有相位的正弦信号拆解成两个正交的信号,不论信号是什么相位,都认为是一个零相位正弦信号和一个零相位余弦信号的叠加,我获得这个信号的正弦分量和余弦分量的幅度,就能反应这个信号。这样就需要两个序列,一个正弦序列,一个余弦序列,他们两个正交,我们发现复数符合这个特点,正交,另外有那个宇宙最美公式欧拉公式加成,复数可以用指数表示,这个在数学上就变得很美很简单了,于是虚数就出现了,他表现的是信号的正弦分量。得到的频域变换是无限的,非周期的。

2024-03-27 17:57:12 922

原创 C#实现多重继承和实例

举例:SendDtata类的作用是发送数据,ReceiveData类的作用是接收数据,现在要创建SocketData类,作用是发送和接受数据,此时,你希望SocketData从SendDtata和ReceiveData这两个类继承,但CLR不支持多继承,也就意味着C#不支持多继承,但是,CLR允许通过接口Interface实现“缩水版”的多继承。这一点和抽象类很类似,可是抽象类是个类,他有方法的实现,它所描述的对象是一个无法在现实中具现的对象,但它本身是个类型对象。所以,要合理正确地使用多继承。

2024-03-10 09:15:04 589

转载 C# 实现快速傅里叶变换代码

System.Windows.Forms.DataVisualization.Charting.Series phaseSpectrumSeries = new System.Windows.Forms.DataVisualization.Charting.Series("幅度谱");namespace 快速傅里叶变换。

2024-03-01 18:44:18 748 1

原创 傅里叶变化-Math.Net中Fourier变换使用详解

网络博客中关于连续/离散Fourier变换的文章已经非常详实,本无需赘述。但毕竟下文要用到,所以这里还要简明扼要的说一下。简单说,Fourier变换就是将周期信号沿正交基分解,而一组良好的正交基就是正弦/余弦函数。不过套用伟大的欧拉公式后,我们更多是把作为正交基。基于此连续域上的Fourier变换及其逆变换可以写为不过,对于归一化参数可以略作调整,从而将Fourier变换对写为但是,对于计算机是无法处理连续变量的,从而在上述工作基础之上发展了离散Fourier变换(DFT),将其变换对写为。

2024-03-01 18:29:52 1589

转载 C#/winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小

如果希望控件或窗体根据操作系统中字体的大小进行拉伸或缩小,则按 Font 缩放十分有用,如果控件或窗体的绝对大小无关紧要,则应使用这种方式进行缩放。例如,对于显示图表或其他图形的控件,可能希望使用每英寸点数 (DPI) 缩放,以便该控件始终占据一定百分比的屏幕。MaximizeBox=true,可设置窗体最大化,当窗体超出屏幕时,用户可设置窗体最大化来让窗体尺寸贴合用户屏幕。如果不存在父类,则禁用自动缩放。Autosize=false,设置窗体不根据内容超出而调整窗体自身大小,以免窗体超出屏幕。

2023-12-13 16:34:46 5708

原创 C# 泛型概念及用法详解

泛型(generic)是C# 2.0推出的新语法,它是专门为处理多段代码在不同的数据类型上执行相同的指令的情况而设计的。比如说编程时,碰到功能非常相似的模块,只是它们所处理的数据类型不同,然而我们却需要写不同的方法来实现它,很明显,这加大了我们的工作量,也很乏味。有没有什么办法能够解决这个问题呢?它就是泛型了,可以让多个类型共享一组代码。通过压栈例子可以更清楚的了解泛型{int[] arr;//将int类型的值压栈//将float类型的值压栈。

2023-05-05 20:46:46 9563 1

原创 C# 中delegate、event、Action、Func详解

因为delegate是很宽泛的,格式内容都不受限,俗话说没有规矩不成方圆,如果一人过于随意,那么他所做的事也规范不到哪去,这就会导致后期的维护很费劲,实际开发中也基本都用后面三种。Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托。Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托。Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托。而且只能+=和-=操作。

2023-03-18 21:23:59 2471

原创 QT或MFC中调用Opencv需要引用库时或自身的架构库时可以添加环境变量引用路径下文件的方式搭建环境避免可执行程序下文件过多显得臃肿

c++

2023-02-18 11:29:52 825 1

原创 qt中QString与char *类型相互转换

qt

2023-02-17 19:38:40 4436

原创 编写程序重复定义Bug(multiple definition of)解析

qt

2023-02-17 19:36:02 6521

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除