C#
文章平均质量分 67
我只是学了一下编程
这个作者很懒,什么都没留下…
展开
-
内存中堆和栈的区别
Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。JVM内存的划分有五片:栈内存: 栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离原创 2022-08-26 10:36:30 · 331 阅读 · 1 评论 -
C#中 ??、 ?、 ?: 、?.、?[ ] 问号
“运算符返回的可以是NULL,当返回的成员类型是struct类型的时候,”?.“和”."运算符的返回值类型是不一样的。从这个例子中我们也可以看出它的基本用法:如果对象为NULL,则不进行后面的获取成员的运算,直接返回NULL。如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。b 当a为null时则返回b,a不为null时则返回a本身。引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。如果x为false,则返回z,是省略if{}else{}的简单形式。...原创 2022-08-26 10:34:43 · 202 阅读 · 0 评论 -
C#语法糖
Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。需要声明的是“语法糖”这个词绝非贬义词,它可以给我们带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。2.取List中的值。...原创 2022-08-18 15:28:37 · 959 阅读 · 0 评论 -
C# - 程序结构
在我们研究C#编程语言的基本构建块之前,让我们看一下最基本的C#程序结构,以便我们在接下来的章节中将其作为参考。创建Hello World计划AC#程序包括以下部分 -命名空间声明 A class Class methods 类属性 A Main method 声明和表达 Comments让我们看一下打印“Hello World”字样的简单代码 -using System;namespace HelloWorldApplication { class HelloWor原创 2022-04-01 08:55:07 · 272 阅读 · 0 评论 -
C# - 环境
在本章中,我们将讨论创建C#编程所需的工具。 我们已经提到C#是.Net框架的一部分,用于编写.Net应用程序。 因此,在讨论运行C#程序的可用工具之前,让我们了解C#与.Net框架的关系。.Net框架.Net框架是一个革命性的平台,可以帮助您编写以下类型的应用程序 -Windows应用程序 Web应用程序 网页服务.Net框架应用程序是多平台应用程序。 该框架的设计方式使其可以使用以下任何语言:C#,C ++,Visual Basic,Jscript,COBOL等。所有这些语言都可以访问原创 2022-04-01 08:54:30 · 815 阅读 · 0 评论 -
C# - 概述
C#是一种现代的,通用的,面向对象的编程语言,由Microsoft开发并经欧洲计算机制造商协会(ECMA)和国际标准组织(ISO)批准。C#是由Anders Hejlsberg及其团队在.Net Framework开发期间开发的。C#专为公共语言基础结构(CLI)而设计,它由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。以下原因使C#成为一种广泛使用的专业语言 -它是一种现代的通用编程语言 它是面向对象的。 它是面向组件的。 这很容易学习。 它是一种原创 2022-04-01 08:53:55 · 266 阅读 · 0 评论 -
C# 通过Dynamic访问System.Text.Json对象
有时在处理Http请求的时候,偷懒不想定义一个Model来处理,使用Dynamic来直接操作请求的数据是非常方便的C#中dynamic关键字❝dynamic关键字和动态语言运行时(DLR)是.Net 4.0中新增的功能。什么是"动态" 编程语言有时可以划分为静态类型化语言和动态类型化语言。C#和Java经常被认为是静态化类型的语言,而Python、Ruby和JavaScript是动态类型语言。 一般而言,动态语言在编译时不会对类型进行检查,而是在运行时识别对象的类型。这种.原创 2021-06-29 13:07:34 · 733 阅读 · 0 评论 -
C# 实现 Web 打印插件
前言最近,客户有个需求过来,Web端无预览打印,美其名曰:快捷打印。当时第一反应就是找插件,拿来主义永远不过时。找了一圈发现,免费的有限制,没限制的需要收费(LODOP真的好用)。说来就是一个简单的无预览打印,收费的诸多功能都无用武之地,总的来说性价比很低,所以就打算自己琢磨着写一个算了。刚开始总是纠结在Web端去实现直接打印,打印是实现了,结果是服务端的,客户端只能一脸懵。后来(准备妥协了),安装了一些收费的插件发现,都需要先安装一个客户端程序,灵光乍现,解决方案这不就出来原创 2021-06-27 11:22:54 · 718 阅读 · 0 评论 -
C# 中文验证码开发
Visual Studio版本:Enterprise 2015.net Framework版本:3.5代码分析首先中文汉字很多,采用字符集或者数据库的方式也行,但是比较麻烦,那么可以省去字符集和数据库吗,肯定是可以的,GB2312编码字符集。GB2312采用双字节编码方式。编码范围:A1A1-FEFE,其中汉字编码范围:B0A1-F7FE。具体细节可以自行查阅,GB2312编码共收录汉字6763个,其中一级汉字3755个,二级汉字3008个。一级为常用汉字,二级为偏僻或不常见的汉原创 2021-06-27 11:17:11 · 135 阅读 · 0 评论 -
C#+Selenium+ChromeDriver 爬取网页,完美模拟真实的用户浏览行为
背景Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。而对于爬虫来说,使用Selenium操控浏览器来爬取网上的数据那么肯定是爬虫中的杀手武器。这里,我将介绍selenium + 谷歌浏览器的一般使用。需求在平常的爬虫开发中,有时候网页是一堆js堆起来的代码,涉及很多异步计算,如果是普通的http 控制台请求,那么得到的源文件是一堆js ,需要自己在去组装数据,很费力;但是采用Selenium+ChromeDriver可以达到.原创 2021-06-27 11:15:27 · 655 阅读 · 0 评论 -
C# File.Exists判断系统文件 警惕32位和64位的差异
前言在调试一个Winform程序,使用File.Exists 判断一个已经存在的驱动文件,程序一直返回false。因为驱动文件属于系统目录,心想难道是权限不够导致的?然后用管理员身份运行软件,依然返回false。吓的我赶紧去系统目录C:\Windows\system32\drives 搜索该文件,一看在这里啊,怎么还是返回false。开始还以为VS出问题了,然后尝试判断一个D盘下的文件,发现可以判断成功。判断代码如下// 获取系统目录var system原创 2021-06-27 11:12:20 · 1161 阅读 · 0 评论 -
C# + HtmlAgilityPack + Dapper走一波爬虫
最近因为公司业务需要,又有机会撸winform了,这次的需求是因为公司有项目申报的这块业务,项目申报前期需要关注政府发布的相关动态信息,政府部门网站过多,人工需要一个一个网站去浏览和查阅,有时候还会遗漏掉,因此呢,我们打算用爬虫+移动端web来做,我主要负责爬虫和web Api。爬虫篇爬虫主要采用.Net强大的开源解析HTML元素的类库HtmlAgilityPack,操作过XML的童鞋应该很快就可以上手,通过分析XPath来解析HTML,非常的方便的,还有一款不错的叫Jumony,没用过,对原创 2021-06-27 11:11:21 · 425 阅读 · 0 评论 -
.NET Core 部署到 Linux(CentOS) 最全解决方案(常规篇)
前言本文为大家介绍使用 .NET Core部署到Linux服务器的方法,通过本文你将了解到Linux在虚拟机下的安装、Xshell,Xftp的使用方法、git在linux下的交互使用以及.net core在linux下的发布与运行全过程,本文皆在总结了一些经验与笔记在部署过程中遇到的一些问题,同时分享给大家,供大家参考,欢迎讨论交流。一、Linux操作系统、Xshell、Xftp安装操作系统可选择你比较熟悉的Linux发行版,如果你是第一次接触Linux,推荐使用CentOs,因为本原创 2021-06-26 13:33:32 · 1133 阅读 · 0 评论 -
C# + Selenium + ChromeDriver 爬取网页
背景Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。而对于爬虫来说,使用Selenium操控浏览器来爬取网上的数据那么肯定是爬虫中的杀手武器。这里,我将介绍selenium + 谷歌浏览器的一般使用。需求在平常的爬虫开发中,有时候网页是一堆js堆起来的代码,涉及很多异步计算,如果是普通的http 控制台请求,那么得到的源文件是一堆js ,需要自己在去组装数据,很费力;但是采用Selenium+ChromeDrive原创 2021-06-26 13:27:18 · 1235 阅读 · 0 评论 -
.NET Core 处理 WebAPI JSON 返回烦人的null为空
前言项目开发中不管是前台还是后台都会遇到烦人的null,数据库表中字段允许空值,则代码实体类中对应的字段类型为可空类型Nullable<>,如int?,DateTime?,null值字段序列化返回的值都为null,前台对应字段赋值需要做null值判断,怎么才能全局把null替换为空。本文分享WebAPI接口服务统一返回null替换为空的方法。一、分析问题.NET Core中使用Newtonsoft.Json进行序列化,WebAPI接口返回格式通过Startup.c原创 2021-06-26 13:23:26 · 1035 阅读 · 0 评论 -
ASP.NET Core WebAPI解决发布后每隔一段时间请求变缓慢
环境 项目:.NET Core WebAPI 3.1 平台:Windows Server 2008 r2 服务器:IIS 7.5 前言项目发布到IIS以后第一次请求特别慢大概7.8秒,然后每隔5分钟请求一次大概2.3秒,下面讲解下我的解决过程,如果心急的朋友直接看最后一步。1、在IIS站点中设置HTTP响应头Cache-control这个把当前请求页面缓存了,会出现2个账号登录显示的是相同页面,请求响应的时间并没有提高原创 2021-06-26 13:22:34 · 3096 阅读 · 0 评论 -
WinForm调用摄像头扫码识别二维码
前言因公司业务需求,需要在Windows系统下调用摄像头识别二维码需求,就有了这个功能。根据网上网友提供的一些资料,自己整合应用到项目中,效果还不错(就是感觉像素不是太好)。现在将调用摄像头+识别二维码这两个功能单独出来写到这里,供大家讨论和参考。有什么不足或者问题大家可以提出来,共同改进共同进步。一、创建项目解决方案1、创建一个空的Winform项目解决方案,我起名叫他:ScanQRCode2、将Form1作为主窗体,设置相关属性: StartPositi原创 2021-06-26 13:20:22 · 857 阅读 · 0 评论 -
C# 脚本引擎 CS-Script
前言最近想要在程序中嵌入一个C#脚本引擎,在.NET Framework时代用过一个叫做CS-Script的东西,感觉还是不错,发现现在也支持.NET Core了,试着嵌入一下。比较要说能够运行C#脚本的解决方案,有Roslyn和Mono,与他们相比,CS-Script能够提供的封装更为高级,它底层是通过Roslyn之类的引擎运行的,在此基础上,提供了一些额外功能: 执行完整的C#文件 通过外部进程执行C#文件 在运行过程中链接多个C#文件,原创 2021-06-26 13:19:25 · 2050 阅读 · 0 评论 -
.NET Core 的优秀开源项目合集
前言开源项目非常适合入门,并且可以作为体系结构参考的好资源,GitHub中有几个开源的.NET Core项目,这些项目将帮助您使用不同类型的体系结构和编码模式来深入学习.NET Core技术,本文列出了不同类别的优秀的开源项目。eShopOnContainerseShopOnContainers是一个示例参考应用程序,演示了Microsoft的基于容器的微服务的各种体系结构模式。 分类:参考项目 License:MIT 架构:基于容器原创 2021-06-26 13:18:04 · 479 阅读 · 0 评论 -
理解 C# 中的 async await
前言一个老掉牙的话题,相关优秀文章已经有很多了,我写这篇文章完全是想以自己的思维方式来谈一谈自己的理解。(PS:文中涉及到了大量反编译源码,需要静下心来细细品味)一、从简单开始为了更容易理解这个问题,我们举一个简单的例子:用异步的方式在控制台上分两步输出"Hello World!",我这边使用的是 Framework 4.5.2class Program{ static async Task Main(string[] args) { Co原创 2021-06-25 18:26:03 · 298 阅读 · 0 评论 -
C# 调用动态链接库读取二代身份证信息
概述一般来说winform应用程序解决这个问题起来时很容易的,web应用程序就麻烦一点了。你必要有联机型居民身份证阅读器一个。实现方式1、新建一个winform控件项目ReadCardControl,添加一个主类ReadIDCardprivate bool ReadIDCard() { try { BLL.API.SynIDCardAPI.IDCardData CardMsg = new BL...原创 2021-06-25 18:22:11 · 428 阅读 · 0 评论 -
c# 之winform 可编辑table 踩过的坑
using System;using System.Collections.Generic;using System.Configuration;using System.Data;using System.Drawing;using System.IO;using System.Reflection;using System.Text;using System.Text.RegularExpressions;using System.Web.Script.Serialization;.原创 2021-06-24 14:13:43 · 324 阅读 · 0 评论 -
两种方法来实现在C#的winform项目的多个窗体中传值
winform项目中,多个窗体间的传值是很多人比较关注的问题,因为在实际的项目开发中,这个技术是必须的。这个技巧的实现,不只是有一种方法,我们可以从多方入手,今天呢,就讲解两种方法。第一种方法,利用委托和事件。首先,我们创建两个winform窗体,对界面的设计如下:我们来假设有这么一个项目,我的主form需要得到其他的form(简称次form)的某些数据,如何得到呢?我们可以利用委托来实现的,第一步当然是创 建委托及事件。那么我们在哪个窗体创建呢?那就是次form了。我们在次form里面设置委托事件的原创 2021-06-24 14:09:51 · 984 阅读 · 0 评论 -
C#在WINForm程序中创建XML文件
<?xml version="1.0" encoding="gb2312"?> 1.0.1818.42821 说明 FileName="name" FileVersion="sdf" FileLength="sdf" FileCreationTime="sd" />string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;获取和设置包含该应用程序的目录的名称...原创 2021-06-24 14:05:35 · 184 阅读 · 0 评论 -
C# 人脸识别库
.NET人脸识别库ViewFaceCore这是基于SeetaFace6 人脸识别开发的.NET 平台下的人脸识别库这是一个使用超简单的人脸识别库这是一个基于.NET Standard 2.0 开发的库这个库已经发布到 NuGet ,你可以一键集成到你的项目此项目可以免费商业使用开源 开源协议:Apache-2.0 GitHub地址:https://github.com/View12138/ViewFaceCore 一、示例原创 2021-06-24 14:03:08 · 1328 阅读 · 0 评论 -
c#winform怎样实现动态生成控件
概述动态创建添加控件,可以在一个大容器里一次性放入多个控件。例:根据文本框中输入的数字 给flowLayoutPanel1 添加多少个button。窗体设计中,需要什么控件就从工具箱里拖出一个控件“挂”在窗体上。其实,窗体上的控件,不但可以“拖”,还可以用代码动态生成。动态生成控件,对需要相同的大量的控件还是比较有用的。实现方式1、加载数据,往panel添加Label 控件。 private void LoadRoomType() { DataTable原创 2021-06-24 14:01:41 · 1529 阅读 · 0 评论 -
C#-WinForm跨线程修改UI界面
背景在我做WinForm开发的过程中,经常会遇到耗时操作或阻塞操作。他们会引发软件的卡顿甚至假死,严重影响软件的使用。因此,这类耗时或阻塞的操作一般都会使用异步的方式去执行,不影响主线程(UI线程)与用户间的交互。但多个线程竞争读写同一个资源往往会造成意想不到的意外结果,UI界面也是一种资源,所以跨线程修改UI界面往往被加以限制。而在Winform中,跨线程修改UI界面同样是不被允许的。在子线程中修改界面控件时Visual Studio会报出如下错误:解决思路.Net提供了很多跨线程修改UI原创 2021-06-24 14:00:00 · 412 阅读 · 0 评论 -
【C# Windows窗体】上传文件
private void btnUpLoadPic_Click(object sender, EventArgs e) { //文件类型过滤 openFileDialog1.Filter = "图像文件(*.jpg,*.bmp,*.gif)|*.jpg;*.bmp;*.gif"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { ...原创 2021-06-24 13:49:34 · 528 阅读 · 0 评论 -
C# WinForm界面设计教程
WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,一般使用 C# 编程。C# WinForm 编程需要创建「Windows窗体应用程序」项目。.NET 提供了大量 Windows 风格的控件和事件,我们可以直接拿来使用,上手简单,开发快速。Windows 窗体应用程序是 C# 语言中的一个重要应用,也是 C# 语言最常见的应用。这套 C# WinForm 教程将教会大家如何使用 WinForm 进行界面设计,并绑定对应的事件原创 2021-06-24 13:48:11 · 15922 阅读 · 0 评论 -
如何使用C#在Windows中利用系统调用执行Shellcode注入
前言在通过Sektor7恶意软件开发必修课程学习了如何使用C语言编写Shellcode注入工具之后,我希望尝试如何在C#中执行相同的操作。实际上,使用P/Invoke来运行类似的Win32 API调用,并编写一个与Sektor7类似的简单注入工具非常容易。我注意到其中的最大区别是,没有直接等效的方法来混淆API调用。在对BloodHound Slack频道进行了一些研究和提问之后,在@TheWover和@NotoriousRebel的帮助下,我发现有两个主要的领域可以进行研究,一个是使用本地Wi...原创 2021-06-24 13:12:04 · 1296 阅读 · 0 评论