C#
文章平均质量分 61
LUOCHENLONG
这个作者很懒,什么都没留下…
展开
-
[随手笔记]彻底搞懂C#的委托和事件
什么是委托委托是特殊的类。比如:delegate void MyDel();//就是创建一个委托类,它等价于class MyDel{}当然,这里我原创 2021-06-06 19:42:34 · 623 阅读 · 0 评论 -
C# 中的经常使用的流总结
本篇文章简单总结了在C#编程中经常会用到的一些流。比如说FileStream、MemoryStream、 BufferedStream、 NetWorkStream、 StreamReader/StreamWriter、 TextReader/TextWriter等的简单用法。一 FileStream类 FileStream类主要用于读取磁盘上的文件或者向磁盘文件写入转载 2017-07-15 14:28:11 · 492 阅读 · 0 评论 -
C# 通过内存流将字节转换为相应数值
using (MemoryStream ms = new MemoryStream(new byte[] { 1 })) { using (BinaryReader br = new BinaryReader(ms)) { byte原创 2017-07-15 11:06:49 · 817 阅读 · 0 评论 -
循环冗余检验:CRC-16-CCITT查表法
/// /// 循环冗余检验:CRC-16-CCITT查表法 /// public class CRC16__CCITT { #region 计算给定长度数据的16位CRC /// /// 计算给定长度数据的16位CRC ///原创 2017-07-15 10:21:20 · 4808 阅读 · 0 评论 -
8位校验和
byte[] testA = { 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0原创 2017-03-06 10:49:31 · 5558 阅读 · 0 评论 -
C#项目中移除多余引用
右键——组织using——移除未使用的using原创 2017-01-03 11:30:17 · 5663 阅读 · 0 评论 -
字符串和字节数组互相转换,转换后数据不丢失
string a = Convert.ToBase64String(myByte);byte[] b = Convert.FromBase64String(a);原创 2016-12-30 16:06:04 · 3097 阅读 · 0 评论 -
VS中的debug和releasse版本的区别
vs中的程序有debug和release两个版本,Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发 人员提供强大的应用程序调试能力。而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信 息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。原创 2016-12-23 10:28:43 · 821 阅读 · 0 评论 -
串口数据解析通用方法
#region 解析方法2 // Listening = true;////设置标记,说明我已经开始处理数据,一会儿要使用系统UI的。 isReceive = true; //将数据添加到缓存区 buffer.AddRange(receiveByte);原创 2017-09-18 08:23:53 · 9225 阅读 · 0 评论 -
字节数组转16进制输出
#region 字节数组转16进制字符串 /// /// 字节数组转16进制字符串 /// /// /// public string byteToHexStr(byte[] bytes) { string StringOut =原创 2017-09-18 08:33:34 · 1152 阅读 · 0 评论 -
sealed
sealed 修饰符可以应用于类、实例方法和属性。密封类不能被继承。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed 修饰符必须始终与override(C# 参考) 一起使用。在类声明中使用 sealed 修饰符可防止继承此类,例如: sealed class SealedClass {转载 2017-10-08 15:53:35 · 225 阅读 · 0 评论 -
反射使用
反射的概念大多数程序都要处理数据,包括读、写、操作和显示数据。对于某些程序来说,它们操作的数据不是数字、文本或图形,而是程序和程序类型本身的信息。·有关程序及其类型的数据北城为元数据(metadata),它们保存在程序集中。·程序在运行时,可以查看其他程序集或其本身的元数据。一个运行的程序查看本身的元数据或其他程序的元数据的行为叫反射(reflection)。Type类BCL声明了一个类叫做Typ...原创 2017-10-08 16:44:58 · 232 阅读 · 0 评论 -
Attribute(特性)
特性含义:特性(attribute)是一种允许我们想程序的程序集增加元数据的语音结构。他是用于保存程序结构信息的某种特殊类型的类。·将应用了特性的程序结构(program constuct)叫做目标(taget)。·设计用来获取和使用元数据的程序(比如对象浏览器)叫做特性的消费者(consumer)。·.NET预定了很多的特性,我们也可以生命自定特性。·我们再源代码中将特性应用原创 2017-10-08 17:06:08 · 466 阅读 · 0 评论 -
C# StringBuilder
StringBuilder类可以帮助你动态、有效地产生字符串,并且避免创建许多副本。·StringBuilder类是BCL的成员,位于System.Text命名空间中。·StringBuilder对象是Unicode字符的可变数组。当依据给定的付出创建了StringBuilder对象之后,类分配了一个比当前字符串长度更长的缓冲区。只要缓冲区能容纳对字符串的改变就不会分配新的内存。如果字原创 2017-10-09 08:31:22 · 1486 阅读 · 0 评论 -
C# ?和??的使用
static void Main(string[] args) { string b = "b"; string c = "c"; string d = "d"; //?? 判断要赋值的对象是否为空,如果为空往后赋值 string a= b ?? c?原创 2017-07-25 15:24:54 · 315 阅读 · 0 评论 -
C# 析构函数和dispose模式
析构函数类可以用用析构函数(destructor),它可以在一个类的实例不在被引用的时候执行一些操作,以清除或释放非托管资源。非托管资源是指类似用Win32 API或非托管内存块获取的文件句柄这样的资源。使用.NET资源是无法获取它们的,因此如果我们只用.NET类。是不需要编写太多的析构函数的。 关于析构函数要注意以下几点。·每个类只能有一个析构函数。·析构函数不能有原创 2017-10-09 10:20:24 · 3600 阅读 · 0 评论 -
C# Virtual
Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。 情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的原创 2017-10-09 10:58:28 · 684 阅读 · 0 评论 -
IIS MIME类型支持
问题:发布项目的时候发现客户端无法访问IIS服务器上的MP3、MP4音视频。解决办法:打开控制面板——>管理工具——>Internet信息服务(IIS)管理器如图:选中MIME类型如下图:输入文件扩展名和MIME类型MIME类型如下按照内容类型排列的 Mime 类型列表类型/子类型原创 2017-10-13 08:51:41 · 1066 阅读 · 0 评论 -
Action
Action 不带参数没有返回值的的委托对象 public Action DataDelegate;public void 方法(){}DataDelegate = 方法;原创 2018-01-11 16:53:19 · 141 阅读 · 0 评论 -
SQLHelper
//静态类无法实例化 //静态类可以用作只对输入参数进行操作并且不必获取或设置任何内部实例字段的方法集的方便容器 //静态类的类型信息在引用该类的程序时加载,静态构造函数只调用一次,静态类会保存在内存中 //只包含静态成员 //无法进行实例化 //会进行密封,不能继承 //不能包含实例构造函数 static class SqlHe原创 2018-01-12 13:39:35 · 194 阅读 · 0 评论 -
委托和事件
什么是委托委托是持有一个或多个方法的对象。正常情况下我们不会想要“执行”一个对象,但委托于典型的对象不同。可以执行委托,这时委托会执行它所“持有”的方法。委托和类一样,是一种用户自定义的类型。但类表示的是数据和方法的集合,而委托则持有一个或多个方法,以及一系列预定义操作。使用委托(1)声明一个委托类型。 delegate 返回类型 类型名称(参数);(2)使用该委托类型声明一个原创 2018-01-15 17:33:01 · 438 阅读 · 0 评论 -
Base使用
base 关键字用于从派生类中访问基类的成员:调用基类上已被其他方法重写的方法。指定创建派生类实例时应调用的基类构造函数。仅允许基类访问在构造函数、实例方法或实例属性访问器中进行。从静态方法中使用 base 关键字是错误的。所访问的基类是类声明中指定的基类。 例如,如果指定 class ClassB : ClassA,则从 ClassB 访问 ClassA 的成员,而不考虑 ClassA 的基类。...原创 2018-02-10 09:25:14 · 825 阅读 · 0 评论 -
IEnumerable 接口
公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。语法[GuidAttribute("496B0ABE-CDEE-11d3-88E8-00902754C43A")][ComVisibleAttribute(true)]public interface IEnumerable方法 名称说明GetEnumerator()返回循环访问集合的枚举数。扩展方法 名称说明AsParallel()已重载。...翻译 2018-02-11 15:03:22 · 402 阅读 · 0 评论 -
接口的显示实现和隐式实现
namespace IEnumerableTest{ /** * * 实现接口的类必须包含该接口的所有成员的实现代码,且都是公共的。实现接口成员有隐式实现和显示实现两种方法。 * * * */ interface Interface1 { void DoSimple1(); void DoSimple2()...原创 2018-02-11 15:33:14 · 673 阅读 · 0 评论 -
where T : class的含义
public static T DeserializeJsonToObject<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json)...原创 2018-02-28 09:07:20 · 1058 阅读 · 0 评论 -
as 和 is 使用方法
在 C# 中已经提供了一个很好的类型转换方式,那么在进行类型转换的时候,可以按照如下的方式进行选择。类型转换使用选择Object => 已知引用类型使用 as 操作符来完成Object => 已知值类型先使用 is 操作符来进行判断,再用类型强转方式进行转换已知引用类型之间转换首先需要相应类型提供转换函数,再用类型强转方式进行转换已知值类型之间转换最好使用系统提供的 Convert 类...原创 2018-02-28 09:21:46 · 1290 阅读 · 0 评论 -
后台线程 BackgroundWorker
当我们需要另建一个线程,在后台持续运行以完成某项工作,并不时的与主线程进行通信的时候,就用BackgroundWorker public partial class Form1 : Form { BackgroundWorker bw = new BackgroundWorker(); public Form1() { Init...原创 2018-05-09 11:37:18 · 236 阅读 · 0 评论 -
Parallel 并行循环
/// <summary> /// Parallel.For /// Parallel.ForEach /// 并行循环,迭代之间互相独立,程序运行在多核处理器上,能并行处理,提过效率 /// </summary> class Program { static void Main(string[] args) ...原创 2018-05-09 13:46:40 · 332 阅读 · 0 评论 -
匿名对象与动态类型
class Program { static void Main(string[] args) { //当需要使用临时对象时,使用匿名对象 dynamic p = new { Name="张三",Age=50};//通过动态类型接收 var t = new { Name = "张三", Age ...原创 2018-04-25 08:59:48 · 362 阅读 · 0 评论 -
BeginInvoke和EndInvoke
BeginInvoke和EndInvoke 执行委托异步方法namespace InvokeTest{ delegate long MyDel(int first, int second); class Program { static long Sum(int x, int y) { Console.WriteLine("当前...原创 2018-05-09 15:56:16 · 205 阅读 · 0 评论 -
Timer 异步定时器
class Program { int TimesCalled = 0; /// <summary> /// 回调方法 /// </summary> /// <param name="state"></param> void Display(object s...原创 2018-05-09 16:20:52 · 1279 阅读 · 0 评论 -
线程和进程关系说明
系统运行是会创建一个进程,进程是构成运行程序的资源的集合,真心资源包括虚地址空间,文件句柄和许多其他程序运行所需的东西。在进程的内部,系统会创建一个称为线程的内核对象,他代表了真正的执行程序。线程说明:1.默认情况下,一个进程只包含一个线程,从程序的开始一直执行到结束。2.线程可以派生其他线程,因此在任意时刻,一个进程都可能包含不同状态的多个线程,来执行程序的不同部分。3.如果一个进程拥有多个线程...原创 2018-05-09 16:33:21 · 213 阅读 · 0 评论 -
异步方法
注意,异步方法是C# 5.0后增加异步(async)方法:用于异步执行其他工作,然后立即返回到调用方法。await 表达式:用于异步方法内部,指明需要异步执行的任务。一个异步方法可以包含任意多个await表达式,如果一个都不包含的话编译器会发出警告。 class MyDownloadString { Stopwatch sw = new Stopwatch(); ...原创 2018-05-09 17:29:49 · 2447 阅读 · 0 评论 -
C# sealed修饰符
sealed 修饰符表示密封用于类,表示该类不能被继承,不能abstract同时使用,因为这两个修饰符在含义上互相排斥用于方法和属性时,表示该方法或属性不能被重写,必须和override关键字一起使用,因为使用C# sealed修饰符的方法或属性肯定是基类中相应的虚成员通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱恰当的利用C# sealed修...原创 2018-05-17 08:29:21 · 589 阅读 · 0 评论 -
C# 静态类
static class D { } /// <summary> /// 静态类的特点 /// 1.只能包含静态类成员 /// 2.无法实例化,无法被继承,无法继承它类,该类为密封类 /// 3.可以包含静态构造函数,不能包含实例构造函数 /// </summary> static class A { //静态...原创 2018-05-17 09:21:41 · 802 阅读 · 0 评论 -
命名空间
作用:防止项目引用冲突。命名空间是一个字符串,他加载类名或类型名的前面并且通过点进行分隔。包括命名空间名、分隔点,以及类名的完整字符串叫做类的完全限定名。命名空间是共享命名空间名的一组类和类型。注意:1.在命名空间内,每个类型名必须有别于所有其他类型。2.在命名空间内的类型称为命名空间的成员。3.一个源文件可以包含任意数目的命名空间声明,可以顺序也可以嵌套。using命名空间指令通知编译器你将使用...原创 2018-05-11 10:01:05 · 564 阅读 · 0 评论 -
Try{}catch{}finally{}
try块包含为避免出现异常而被保护的代码。catch子句部分含有一个或多个catch子句。这些是处理异常的代码段,也是异常处理程序。finally块含有所有情况下都要被执行的代码,无论有没有发送异常,即使是Return也会往下执行。System.Exception:所有异常的基类。SystemException:所有预定义系统异常的基类。ApplicationException:所有非致命的、应用...原创 2018-05-12 09:33:30 · 512 阅读 · 0 评论 -
泛型(Generic)
使用场景很多时候,如果我们可以把类的行为提取或重构出来,使之不仅能应用到它们编码的数据类型上,而且还能应用到其他类型上。有了泛型,我们可以从后代码并且二外的增加一个抽象层,对于这样的代码来说,数据类型就不用编码,这是专门为多段代码在不同的数据类型上执行相同指令的情况专门设计的。...原创 2018-05-19 17:08:20 · 573 阅读 · 0 评论 -
预处理指令
预处理指令,指示编译器如何处理源代码。在某些情况下,我们可能希望编译器忽略一部分代码。二其他情况下,我们可能希望代码被编译,预处理指令给了我们这样的选项。语法规则:1.预处理指令必须和C#代码在不同的行。2.于C#语法不通过,预处理指令不需要以分号结尾。3.包含预处理指令的每一行必须以# 字符开始;在#字符前可以有空格,在#字符和指令之间可以有空格。4.允许行尾注释。5.预处理指令说在的行不允许分...原创 2018-05-14 09:17:09 · 252 阅读 · 0 评论 -
C# 托管代码和非托管代码
托管代码托管代码就是Visual Basic .NET和C#编译器编译出来的代码。编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。中间语言被封装在一个叫程序集(assembly)的文件中,程序集中包含了描述你所创建的类,方法和属性(例如安全需求)的所有元数据。你可以拷贝这个程序集到另一台服务器上部署它。通常来说,这个拷贝的动作就是部署流程中唯一的一个操作。托管代码在公共语...原创 2018-05-25 08:23:45 · 2228 阅读 · 0 评论