C#
文章平均质量分 62
以C#编程语言为基础,描述语言的用法
中洲少年
一个深爱神国传统文化的男人,对身为神族人而骄傲。毕生为汉服复兴而努力。
展开
-
C# 用真实需求,手把手教你写面向对象的代码
好久没写过文章了,这里工作很忙。今天继续给大家讲解下,怎么写面向对象的代码。之前也写过类似的文章,但那都是随便举的例子,不是活生生的现实案例。今天使用我刚写的项目来举例子,它是真实存在的需求案例,引领大家一步一步写面向对象代码。号外:各位看到文档不要惊慌,我也是第一次接触这个文档,也不懂这些需求,就是纯看英文文档写出来的代码,跟你们没有两样,我对它的业务也是不懂的。一、首先,先仔细看下需求文档,需求文档是英文的,相信大家大体能看懂,需求是截取的片段。二、实现第一段需求本需求截图如下,该需原创 2022-02-18 11:14:52 · 3559 阅读 · 1 评论 -
不卡主线程,N个异步方法后台运行,且需要按时序顺序执行,要怎么写?
我们会有很多异步方法,通常,调用了N个异步方法后,哪个先执行完,哪个后执行完,是不确定的。场景:若需要确保不影响主线程,即不卡主线程,仍然让这些耗时的异步方法在后台执行,且需要让这些异步方法,按一定的先后顺序(时序)执行,那么要怎么办呢?下面直接提供一个类给大家针对上述场景使用。直接上代码,抄过去即可直接使用。using System;namespace Zhongzhou.TaskFlow{ /// <summary> /// 作业流程任务控制器 .原创 2022-02-09 17:01:28 · 986 阅读 · 0 评论 -
C# 提供一个点击按钮时可变更状态并显示对应文字的按钮控件
本按钮控件很简单,提供简易的状态变更,并显示对应的文字。具体请看效果图:一、提供按钮触发时间间隔,默认300毫秒/// <summary>/// 状态切换时间间隔,单位毫秒。默认300/// </summary>[Browsable(true)][Category("Zhongzhou")][DefaultValue(300)][Description("状态切换时间间隔,单位毫秒。默认300")]public int Interval { ge.原创 2021-12-02 08:55:54 · 4401 阅读 · 0 评论 -
C# 生成chm代码文档
如何生成chm代码文档?一、下载Sandcastlehttps://github.com/EWSoftware/SHFB/releases通过上面的链接可以时刻下载到最新的版本。本文是针对vs2019来操作。二、安装Sandcastle下载解压后,会有一个SandcastleInstaller.exe文件,双击安装它。如上图,安装过程会有很多个Next,一路点下去,若遇到有提示你要Install的地方,通通点一下安装即可,一直到最后一个Next点完,即表示安装完成。.原创 2021-08-19 10:42:16 · 1471 阅读 · 1 评论 -
C# byte、string、char、unicode的相关性。
经常会遇到需要转换字节数组和字符数组,以及编码问题。即便是老手,都不一定能搞明白他们的关系。除非你回去看书,把基础复习一遍记下来打牢。string:是字符串的意思。char:是字符的意思。它用于表示字符。但字符可能是2个char组成的,不过大多数情况下,一个字符,对应一个char。byte:表示字节。unicode:编码,它包含了这个星球的所有语言。所以又有别称“万国码”。好的,下面重点:一个字符串string,通常由N个字符char组成,所以,string.length,.原创 2021-01-18 15:09:03 · 985 阅读 · 0 评论 -
C#需要强名称程序集,HRESULT:0x80131044
System.IO.FileLoadException:需要强名称程序集。(异常来自HRESULT:0x80131044)这个问题,可能是需要进行程序集签名。我的发生场景是在使用Shell的时候,我的Shell功能,会使用到其它的程序集,而其它的程序集又会使用到更多其它的程序集。其中有些程序集还是Nuget中引用安装的。我只能控制我自己开发的程序集对它进行签名,而无法控制Nuget包引用的程序集让它们签名。好吧,下面善于如何进行程序集签名,说下解决方案:第一步:右键打开你的项...原创 2021-01-06 16:14:31 · 3080 阅读 · 0 评论 -
C#如何在EPPlus中冻结首行,冻结Excel首行
在EpPlus中,使用方法FreezePanes进行冻结。如果您要冻结首行,请使用下面的代码:sheet.View.FreezePanes(2, 1);sheet当然就是你的epplus的表格对象,(2,1)表示首行。祝您用餐愉快。原创 2021-01-05 15:00:10 · 1443 阅读 · 0 评论 -
C# 如何使用访问修饰符public、protected等
这是一篇随笔心得。如何使用访问修饰符public、protected、private、internal?理论上来说,刚开始入行写C#的人,都会用这些访问修饰符,都知道都懂这些访问修饰符。现象:您发现了吗,你懂这些东西,不代表你是真懂。大多数人都是假懂。不说别人,就说你自己,对,指的就是你、你、你自己。你回顾一下,自己多年来所开发的项目,整个项目下来,你是不是只会public、private两种,整个项目,几乎就是这2种搞定。间或偶尔用一下其它的,如protected,可能自己的p原创 2020-12-25 16:29:24 · 845 阅读 · 1 评论 -
C#正则表达式如何取反结果,想要结果的 反集
如题,正则表达式如何取反结果,想要结果的 反集。有人说用C#代码将结果取出来后,写段代码循环排除一下,就是反集。嗯,是一个方法,就是不太灵光了些。那么直接在正则表达式中,怎么直接取“反”结果呢?答案:^(?!.*不想要的).*$请将“不想要的”换成你想要排队的那些数据的表达式。比如,我可以使用表达式(\S.*?,\S.*),来得到中间带有逗号的文字:但是我现在要反过来,要得到那些中间没有逗号,或者逗号前面没有文字的那些,也就是要反过来选取,那么就可以使用表达式:^(?!.*原创 2020-12-22 14:31:35 · 1004 阅读 · 0 评论 -
C# win32函数FindExecutable的用法
函数签名:Win32 函数FindExecutable 在C#中的方法签名如下:[DllImport("shell32.dll")]static extern IntPtr FindExecutable(string lpFile, string lpDirectory, [Out] StringBuilder lpResult);签名还可以这样子写:[DllImport("shell32.dll")]static extern int FindExecutable(string .原创 2020-12-16 11:27:47 · 472 阅读 · 0 评论 -
C#如何获取动态类型的实际数据类型?如何判断Com+的类型
一、普通变量在C#中,通常,我们要得到一个变量类型,使用GetType()方法。比如:int m = 0;Type type = m.GetType();是不是感觉很简单。二、如何判断动态类型的实际数据类型?动态类型的关键字是dynamic,怎么取它的类型呢?通过GetType()也一样可以得到的。比如:如上图,我们通过GetType()方法,还是可以取到动态类型dynamic的实际数据类型的三、如何获取Com+的变量数据类型?有了前面2个例子,你是不是想当然的以原创 2020-12-14 11:17:00 · 2516 阅读 · 0 评论 -
C# 文件监控,任何文件夹或文件修改后 ,如何立即触发监控
一、场景有时候,我们需要监控文件夹以及文件的变化,然后做出一些业务处理,这里面,最典型的例子,估计前端攻城狮老熟的,就是各种打包了。那么在C#后端,也会遇到要监控变化的情况。一个文件如何被修改,就会触发什么动作。二、C#中的文件监控可以用钩子函数来处理,这种会处理得让你抓狂,一可能是太多消息事件,你头都大,二估计你不是C/C++的程序员,对win32函数本身就不熟,找资料都要你老费劲了。那么C#中的文件监控还有什么办法呢?C#庞大的类库中,提供了FileSystemWatcher类,该类原创 2020-12-10 14:02:16 · 9953 阅读 · 0 评论 -
C# 创建虚拟盘
一、介绍虚拟盘有点类似于文件的快捷方式,但是又有不同。本文介绍的虚拟盘,是通过网络路径或者自己本地计算机的某个文件夹来创建一个虚拟盘,可能表述不清楚,具体您先看一下效果图:该L盘,实际是本地路径 E:\test 的文件夹映射。双击进去L盘后,看到的东西,跟E:\test下看到的东西是一样的。二、C#如何实体虚拟盘创建虚拟盘的指令是使用cmd命令程序来执行subst命令,那么C#代码,就要模拟这个过程,具体代码如下: static void Main(string[原创 2020-12-10 11:13:49 · 1957 阅读 · 0 评论 -
C#处理VS2019“对 COM 组件的调用返回了错误HRESULT E_FAIL。”
如上图,在Visual Studio2019中,想要添加引用时发生上图错误:“对 COM 组件的调用返回了错误 HRESULT E_FAIL。”这个问题要怎么处理呢?一、打开开发人员命令工具如上图所示,找到Developer Command Prompt for VS2019这个工具,然后打开它,建议您使用超级管理员身份打开。二、找到PublicAssemblies文件夹打开Everything搜索工具,查找关键字“PublicAssemblies”,如上图所示。如...原创 2020-12-02 15:51:44 · 5968 阅读 · 1 评论 -
C#接口,见过在接口中写方法体吗?见过在接口中写静态方法吗?
从C#8.0开始,也不是.net core3.0开始,您可以在C#中编写方法体,以及静态方法。如上图,在以前,我们如果在接口中,只能定义成员,是不可以像实现类一下编写方法体去写代码的。从.net core3.0开始就可以了。一、为什么要允许在接口中编写方法?这个可能是由于前后端分离的发展,现在开发都流行这种模式。WebApi的应用,完全取代了以前的WebService、WCF、ASHX等方式,现在还在用这些方法的人,可能就略显得落伍了。而WebApi一旦提供,可能不仅仅是给一个客户端调用原创 2020-12-01 16:29:01 · 3492 阅读 · 1 评论 -
C#初学者题目,考考你
来点酸爽。1.C#类可以继承多个____A.类B.接口C.抽象类D.静态类2.以下哪些是C#中的值类型____A.Int32B.DoubuleC.DecimalD.以上都是3.以下哪些是C#中的引用类型____A.StringB.LongC.BooleanD.以上没有一个对4.对于Nullable类型,以下哪个说法正确____A.允许将null值赋给引用类型B.允许将null值赋给值类型C.允许将null值赋给静态类D.以上全错5.结构(Struc原创 2020-11-26 16:01:31 · 372 阅读 · 1 评论 -
C# Hashtable,哈希表
一、什么是HashtableHashtable,中文叫哈希表。它里面的英文Hash,音译是哈希。但Hash还有另一个翻译,就是“散列”,所以也叫散列表。Hashtable是一个集合。集合是数据结构的一种,数据结构有集合、线性、树形、图形等。Hashtable可用于存储键值对。二、C#中如何声明一个Hashtable您直接new一个Hashtable对象即可,如下所示:Hashtable hashtable = new Hashtable();三、如何添加和删除通..原创 2020-11-26 09:48:52 · 1300 阅读 · 0 评论 -
C#字段、属性的特性
一、字段的定义字段是在类或结构中直接声明的任意类型的变量。声明一个字段,可以用访问修饰符+类型+变量名称来声明,下图是一个简单的示例:二、属性的定义属性语法是字段的自然延伸,属性需要有get或者set的访问器。声明一个属性,可以用访问修饰符+类型+变量名称来声明,下图是一个简单的示例:三、字段的特性1.字段通常不使用public关键字,仅在private和protected时才建议使用。如果您要使用public时,建议转为属性。这是为了符合面向对象设计的原因。简单一句话理原创 2020-11-24 10:09:20 · 2606 阅读 · 0 评论 -
C# static关键字怎么用,会有什么现象和问题
本文适合有经验的中高级程序员阅读。本文不是针对初学者的关于static关键字怎么使用的教程式文章,而是主要侧重于使用它后会有什么现象和问题,属于实践后的经验杂谈。限于我有限的水平和经验,写的东西不一定准确和全面,还请大家帮助斧正。一、简单说下教程可能还是有必要简单说下关键字的static教程,使用static修饰符可声明属于类型本身而不是属于特定对象的静态成员。static修饰符可用于声明static类。在类、接口和结构中,可以将static修饰符添加到字段、方法、属性、运...原创 2020-11-22 10:10:17 · 2154 阅读 · 1 评论 -
C#、Java高级程序员面试题
现有,某直播平台需要全天抽奖,当天共有1000万积分需要发放,要求一天内全部发完不能留,但积分也不能被快速抢光,全天任何时候任何人抽奖,都要有概率中奖,概率可根据奖池情况进行调整,可抽奖积分要自动匹配当前在线人数峰值变化,成正比例关系。请您设计一套程序开发方案。现在类似这种需要一定经验水平的面试题,五花八门,还是蛮多的,但大体都脱离不了大数据高并发的场景,面试是这样,实际进去是不是干这个还不知道。大家可以尝试评论区看看自己的回答,再观察一下别人的回答,也许下次面试,你就碰上了。这种题目大多时原创 2020-11-21 11:30:15 · 222 阅读 · 1 评论 -
C#面向对象的编程套路,这需要您有基础,否则难以理解
本文适合有经验的中高端程序员阅读。一、编程的思想原则通过之前的文章,各位已经了解了面向对象的一些基本原则和思想。思想是根本,只有掌握了思想,您才有办法写出好的面向对象代码。原则是你的思考指导和方式,它就是你的编程路上的一盏明灯,照亮和解惑你的编码。思想原则,是您做到手中无剑,心中也无剑的至高法则,请您在编程路上一定要永远记住。其它的都是花拳绣腿,多少人做了10年程序员,只是一个经验老到的老司机,而不是编程艺术家,秘密就在这里。二、编程的套路我曾经说过,这话是全网我独家,也.原创 2020-11-20 09:51:37 · 249 阅读 · 1 评论 -
C#演练:一步一步教你如何编写面向对象代码
之前写过一篇文章:C#一步一步教你如何去写面向对象代码今天再次演练,让大家尽可能熟悉并熟练面向对象代码的编写思路和方法。今天以汉服的“形制”为例子,演练怎么编写汉服的面向对象代码。本文出现的中文编码是为了让您看起来方便,您实际业务编写时不宜使用中文。一、构思您的构思,可以来自于UML图,也可以来自于纸张随意绘制,也可以来自你的思维灵感图,看您喜欢,层次关系您需要确定清楚。下图是关于“汉服形制”的思维导图。1.形制的继承关系如上图,树形结构清晰,就不再废话了。2.每个形制.原创 2020-11-19 19:19:52 · 608 阅读 · 0 评论 -
C#低频关键字params用法,什么时候用?
C#中有一个关键字params,它相对于一些主要关键字来说,还算是较为低频的,但也会用到。我们还是需要了解和学习的。一、定义及约束params关键字的作用在于可以让方法参数的数目可变。params的参数类型必须是一维数组。一旦在方法加入了params关键字之后,不能再有任何其它参数了。方法中只能允许一个params关键字。如上图,我们有一个“做饭”的方法,做饭的时候,可能有1个人去做饭,也可能2个,也还可能3个人。就是说,我们不确定到时候到底有几个人想去做饭,如果我们把“做饭”这原创 2020-11-18 08:57:40 · 2029 阅读 · 0 评论 -
C#继承多个接口,每个接口都定义了同样名字的事件,怎么办?
我们在学校里,就已经知道一个事实:C#允许单继承,多实现。每个C#类,都只能有一个父类,该父类可以具体类也可以是抽象类,但只能一个父类,可是C#却是允许实现N个接口的。本文问题:如果这N个接口,都定义了同样的一个名称的事件,然后C#类都实现了这些接口,这些接口中同名的事件名称,会不会引发冲突,不会的话又是怎么处理的?一、会不会只算一个事件?嗯,你可以把它当成一个事件,等于是合并了。如上图,合并成一个后,该事件就是“家庭”类的了。二、那么我要单独使用各自的事件怎么办?如果.原创 2020-11-17 08:53:10 · 1059 阅读 · 0 评论 -
C#关于程序员妹子,那些你遇到的女程序员
写多了一本正经的技术文章,今天来一篇轻松些的。话说,我从事程序开发,有不下于16年了。遇到了几个妹子。一、1号妹子那是我在厦门的时候,那会还在2004年。一家小公司,我是啥水平都不会。刚从学校出来,也没啥本事。那会还用着asp呢。妹子长的还是蛮漂亮的,水平熟练度比我略高一点。那时候我只会改代码,自己还不会写asp。有一天,我遇到一个可能需要我自己写的代码,但是我不会,我去请教妹子,妹子长相美丽,可是说的话,让我如坠寒冰:“你给我多少钱”。于是,我整个人不好了。二、2号妹子来到原创 2020-11-16 19:03:42 · 222 阅读 · 0 评论 -
C#事件,如何在子类(派生类)中调用父类定义的事件
我们知道,事件是一种特殊类型的委托,它只能在声明它的类中使用。所以父类声明了一个事件,子类是无法使用的。本文主题就是:子类中如何使用父类定义的事件。一、了解一下委托本文不是讲委托,但由于事件跟委托关系太密切,所以简单说下委托。我年轻的时候,至少头3年编程经验的时候吧,压根搞不清楚委托是什么意思,为什么要起个名字叫“委托”,咋不叫“托儿所”非要起名叫“委托”?我想,搞不明白这意思的人,估计也不止我一个。委托,就是事先定义一个方法的结构,该方法需要带有什么参数。这样以后凡是用到的事件的地方,原创 2020-11-16 09:41:03 · 3597 阅读 · 2 评论 -
C#事件,如何理解事件,如何定义和使用限制等
今天写一篇简单的文章,就是关于C#事件。说简单,其实要理解也不容易。我记得我好些年都没真正搞明白事件和委托。所以,我想,尽管大家都知道事件和委托,但真正能搞明白的,可能还真不一定都能。一、事件的表现事件会出现在哪里,我们每个人都清楚的。以Winform为例,各种按钮点击,就是事件的一种。它的代码形式很简单、很熟悉:比如上图,是一个窗体的初始化加载时发生的事件。二、事件的声明事件必须指定一个委托,以及事件参数。委托都是基于EventHandler基类,事件参数都是基于Ev.原创 2020-11-15 20:17:39 · 632 阅读 · 0 评论 -
C#软件开发过程管理和控制
你好,这是一份word文档,可供下载。这是我自己写的,不一定正确,也不一定实践中可真正执行,供您参考学习。软件开发过程管理和控制目录1. 过程控制及管理思想...2. 什么是敏捷开发...3. 敏捷开发方法采用哪种...4. 敏捷开发的适用条件...面向对象模型... 中小规模的软件开发... 高素质的开发团队... 集中的开发环境... 客户合作的项目... 需求会发生变化...5. 软件开发的...原创 2020-11-11 17:16:16 · 812 阅读 · 2 评论 -
C#框架结构分层:三层结构,DDD,MVC,MVVM,MVP
本文主题,讲解主要有哪些分层思想。一、三层结构做为早期程序开发的经典,这是一个完全由程序员自己控制的分层思想。在我们自己所有的项目中,几乎是无处不在,无时无刻不在使用。它的主要思想是分界面层(UI)、业务逻辑层(BLL)、数据访问层(DAL),不管去到哪里,这3个都少不掉的。界面层(UI):指html界面那些。业务逻辑层(BLL):指您的模型类和数据逻辑操作。数据访问层(DAL):指您对数据库进行操作,一般指CRUD,即增删改查。它在Visual Studio中的表现类似这样子:原创 2020-11-04 16:08:01 · 8751 阅读 · 0 评论 -
C#演示在.net core的Winform窗体下接入EF
本文主题:如果在.net core的窗体应用程序Winform环境下,以DB First的方式接入.net core的EntityFramework。关于Code First的的方式,我之前有写过一个本地加载Sqlite的文章里面有,估计大部人也不知道就是了,那篇文章总共也才几个人阅读。一、创建项目本文针对.net core,所以创建Windows Forms App(.NET Core),然后创建1个.net standard的类库,命名为Parctice.Database二、引入原创 2020-11-03 09:06:35 · 3472 阅读 · 0 评论 -
C#安装SqlServer2016。目前最新版本是2019。
由于工作需要安装SqlServer,想选2019,但由于2019去除了类图,我用起来很不方便,可能有插件,懒得找和弄。所以,我直接还是选择SqlServer2016来安装。下载地址有很多,找“msdn我告诉你”,就可以了。我由于受下载限制,所以我是在csdn找的一个人制作的SqlServer2016安装包进行下载的。我忘记是哪个版本起,SqlServer的管理界面,已经分离出去了,所以您还需要下载一个SSMS,下载地址是:https://docs.microsoft.com/zh-cn/原创 2020-11-02 10:04:51 · 2137 阅读 · 0 评论 -
C#中的浅拷贝和深拷贝,如何编写两种拷贝的代码?
我们在有些时候,需要在原有数据的基础上,创建另一份数据值完全一样的副本。这时候就有浅拷贝和深拷贝了。简单的讲:浅拷贝的话,新旧两个对象,不论是谁把值改变了,双方都会同时改变。深拷贝的话,则各自相互不会影响。如果你要理解它的这种现象的本质原因的话,那就是内存地址的原因。C#提供了ICloneable接口,实现Clone()方法,可以定制自己的拷贝方式。以下是浅拷贝的简练写法:public object Clone(){ return this.MemberwiseC原创 2020-10-26 17:30:21 · 180 阅读 · 0 评论 -
C#面试,类、抽象类和接口之间的区别,如何理解它们?
这是一篇纯文字的文章,可能需要静心阅读。这让我想起了年轻时候,我已不再少年。那时候我游走于各家公司去面试,倒是遇到了几个问此问题的面试官。多年过去后,有感而发,现在回头看,提这个问题,对经验不丰富的我,那时候只能靠背,知其然不知所以然,而且回答的估计也不到什么点上。不知道各位同学是否也有这样的经历?!这个问题对于经验不丰富的同学,真是很有难度的。除了背之外,自身的理解很浅显。回到话题本身,类、抽象类和接口之间的区别,如果理解它们?1.抽象层次接口是顶级抽象,抽象类是次..原创 2020-10-23 09:16:18 · 293 阅读 · 0 评论 -
C#中如何使用Sqlite、SqliCe等本地数据库?
文章开始之前,先看下运行效果和界面:点击查询项目,弹出Sqlite数据库中的项目表的项目数据。该表一共2条数据,如上图所示。本篇文章是可供生产过程中实际使用的项目代码,源码价值较高,文章最后会附上源码。本项目构建的数据库操作,支持完整的原子事务。先看下项目源码结构:一、前言本项目源码,集成了Sqlite和SqlCe两种本地数据库,同样的,如果您需要更多的本地数据库,仅需按接口实现即可。二、引入Nuget包Sqlite需要引入以下包:Sqlite.Co...原创 2020-10-22 15:58:39 · 1740 阅读 · 0 评论 -
C# Visual Studio冷门知识:IDE生成事件
右键属性,或者Alt+Enter打开工程项目属性:切换到生成事件:这是一项冷门知识,很少人用,使用场合也很少。我由于工作中,需要将bin目录下的dll复制到某个文件夹下,所以,使用了该功能。这对于你在一些场合下,比如生成后,要布署测试或者复制文件到其它地方什么的,会有特殊用处。生成前、生成后的事件,指针对编译来说的。运行生成后事件:分总是、成功生成时、生成更新项目输出时,根据字面意思很好理解。那么我们以生成后事件命令行为例,我写了3句代码,作用都是复制文件,仅供参考:c原创 2020-10-22 09:15:51 · 330 阅读 · 0 评论 -
C#窗体Winform,如何将文件自动生成到bin目录下打包
如上图,我们有一个自定义的RevitDevelopment.config文件,该文件需要在启动时被读取,项目启动时,是在bin目录下开始运行的,若该目录下没有对应的.config文件,或者该.config文件不是最新的,可能就会引发错误。问题:那么我们要如何确保bin目录下的这个.config是最新的呢?如上图,选中想要复制到bin目录下的文件,查看其属性,有一个“复制到输出目录”的属性名称,选择:“如果较新则复制”即可。该属性有3个下拉选项。1.不复制,指不会复制到...原创 2020-10-22 08:58:59 · 2785 阅读 · 0 评论