
C#
文章平均质量分 90
Fantastic_HQ
厚积才能薄发。
展开
-
HTTP 附带cookies模拟登录 (RSA加密)
HTTP 附带cookies模拟登录原理很简单,首先构建HTTP请求,登录成功后将返回的cookies信息保存起来,然后客户端用保存的cookies进行Get请求进行,进行欺骗浏览器访问,此次我是用博客园的进行登录跳转,没想到这网站post的数据是用RSA加密,内心这个崩溃啊,早上是用HTTP请求模拟微信公众号给用户发送信息,没想到微信也是对请求后跳转的网页进行了加密处理,下面是模拟登录的代码///原创 2017-06-21 16:44:46 · 1183 阅读 · 0 评论 -
正则表达式-元字符
正则表达式-元字符 字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,’n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ‘\\’ 匹配 “\” 而 “\(” 则匹配 “(“。^匹配输入字符串的...原创 2018-08-15 14:51:29 · 226 阅读 · 0 评论 -
C#访问注册表的安装路径
绝大多数软件,基本上都会在注册表中记录自己的名字和安装路径信息。在注册表中记录这些信息的位置是:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths因此,我们只要能访问到注册表的这个位置,就可以获取到某些软件的名称和安装路径...转载 2018-05-22 09:27:44 · 1455 阅读 · 1 评论 -
C# 路径读取
C#获取路径总结 <div class="postBody"> <div id="cnblogs_post_body" class="blogpost-body"><p&g原创 2018-04-25 18:43:30 · 503 阅读 · 0 评论 -
C#中Trim()、TrimStart()、TrimEnd()的用法
C#中Trim()、TrimStart()、TrimEnd()的用法: 这三个方法用于删除字符串头尾出现的某些字符。Trim()删除字符串头部及尾部出现的空格,删除的过程为从外到内,直到碰到一个非空格的字符为止,所以不管前后有多少个连续的空格都会被删除掉。TrimStart()只删除字符串的头部的空格。TrimEnd()只删除字符串尾部的空格。 &n...转载 2018-04-24 09:34:19 · 1991 阅读 · 0 评论 -
使用泛型的小技巧
当程序大量使用泛型类型的时候,或者泛型的 类型参数个数比较多的时候,代码可能看着比较散乱,不够简洁。此时可以使用using指令 来声明一个代表着泛型类型的集合:using IntList = List<int>;class Program {static void Main(string[] args) {IntList list = new IntList();lis...原创 2018-02-20 00:02:56 · 240 阅读 · 0 评论 -
泛型示例
原代码: 只对 int[] 进行排序,现增加需求对int[],byte[] ,char[] 及类中某些字段(price)等进行排序public class SortHelper{public void BubbleSort(int[] array) {int length = array.Length;for (int i = 0; i <= length - 2; i+...原创 2018-02-19 23:09:28 · 654 阅读 · 0 评论 -
对象的常量性和原子性
对象的原子性:对象的状态是一个整体,如果一个字段改变,其他字段也要同时做出 相应改变。简单来说,就是要么不改,要么全改。 解决办法:实施的办法是添加一个构造函数,在这个构造函数中为对象的所有字段赋值。对象的常量性:对象的状态一旦确定,就不能再次更改了。如果想再次更改,需要重新构造一个对象。 解决办法:不允许在为对象赋值以后还能对对象状态进行修改,所以将属性中的set访问器删除,同时将字段声...原创 2018-02-19 22:32:54 · 718 阅读 · 0 评论 -
深层复制
深度复制就是将引用成员指向的对象也进行复制。实际的过程是创建新的引用成员指向的对象,然后复制对象中所包含的数据。 深度复制可能会变得非常复杂,因为引用成员指向的对象可能包含另一个引用类型成 员,最简单的例子就是一个线性链表。 如果一个对象的成员包含了对于线性链表结构的一个引用,浅度复制只复制了对头节点 的引用,深度复制则会复制链表本身,并复制每个节点上的数据。 考虑一下以下例子,如果期望...原创 2018-02-14 17:58:59 · 926 阅读 · 0 评论 -
C#类型基础
C#数据类型主要分为两类,一种是值类型,一种是引用类型.C#中所有的数据类型都是对象,它们可以有方法,属性。 1. 值类型值类型包括:结构体,枚举,以及简单类型如 int , byte , 简单类型实际上是 BCL基类库类型的别名,比如声明一个int类型,实际上是声明一个 System.Int32 结构类型。short(System.Int16),int(System.Int32)...原创 2018-02-09 15:11:33 · 332 阅读 · 0 评论 -
IL指令
名称说明Add将两个值相加并将结果推送到计算堆栈上。Add.Ovf将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上。Add.Ovf.Un将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算堆栈上。And计算两个值的按位“与”并将结果推送到计算堆栈上。Arglist返回指向当前方法的参数列表的非托管指针。Beq如果两个值相等,则将...原创 2018-02-09 19:28:02 · 243 阅读 · 0 评论 -
ThreadPool 线程池
线程池作用为了解决重复创建线程,消耗大量内存的问题,操作系统把创建的线程存起来,形成一个线程池(里面有多个线程),当要处理任务时,若线程池中有空闲线程(前一个任务执行完成后,线程不会被回收,会被设置为空闲状态),则直接调用线程池中的线程执行.线程池的工作原理:ThreadPool.SetMaxThreads(int workerThreads, int completionPortTh原创 2018-02-01 17:05:03 · 508 阅读 · 0 评论 -
C#/.NET主线程与子线程之间的关系
一般来说,一个应用程序就对应一个进程,一个进程可有一个或多个线程,只有一个主线程。主线程与子线程之间的关系默认情况,在新开启一个子线程的时候,他是前台线程,只有将线程的IsBackground属性设为true;他才是后台线程当子线程是前台线程,则主线程结束并不影响其他线程的执行,只有所有前台线程都结束,程序结束当子线程是后台线程,则主线程的结束,会导致子线程的强迫结束不管是前台原创 2018-02-01 11:02:04 · 4205 阅读 · 1 评论 -
使用lockbits方法处理图像
许多图像处理任务即时是最简单的文件类型转换,例如从32位深度到8位深度的格式转化,直接获得像素阵列要比使用GetPixel和SetPixel等方法的效率高得多。 你可能会发现DotNet采用托管机制,大多数情况下微软会推荐你使用托管代码,理由是便捷和安全。实际应用中,直接操作内存中的数据块是很少见的,尽管如此,图像处理恰恰是这类为数不多的情况之一,因为使用托管代码的效率低的难以忍转载 2018-01-31 08:56:24 · 1543 阅读 · 0 评论 -
AttributeUsage
AttributeUsage 【AttributeUsage】 System.AttributeUsage声明一个Attribute的使用范围与使用原则。 AllowMultiple 和 Inherited 参数是可选的,所以此代码具有相同的效果: AttributeTarget的值可以参考1。部分可取值如下: 如果 AllowMulti转载 2017-09-12 09:23:56 · 4590 阅读 · 0 评论 -
NLog
一个简单好用的日志框架NLog 之前我介绍过如何使用log4net来记录日志,但最近喜欢上了另一个简单好用的日志框架NLog。 关于NLog和log4net的比较这里就不多讨论了,感兴趣的朋友可以参看.NET日志工具介绍和log4net vs. Nlog这两篇文章。本文主要介绍一下如何在项目中使用NLog。 在Nuget中安装NLog NLog可以直接使用Nuget安装: P转载 2017-09-05 17:50:54 · 5077 阅读 · 0 评论 -
C# 5.0 新特性——Async和Await
[异步编程]C# 5.0 新特性——Async和Await使异步编程更简单 本专题概要:引言同步代码存在的问题传统的异步编程改善程序的响应C# 5.0 提供的async和await使异步编程更简单 async和await关键字剖析小结 一、引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.转载 2017-09-05 10:11:53 · 3508 阅读 · 0 评论 -
HashSet和SortSet对比
微软在 .NET 3.5 新增了一个 HashSet 类,在 .NET 4 新增了一个 SortedSet 类. .NET Collection 函数库的 HashSet、SortedSet 这两个泛型的类,都实现了 System.Collections.Generic.ISet 接口.参见如下示例:var set = new HashSet<int>() { 5, 9, 2, 1, 2, 2,转载 2017-06-22 16:34:34 · 1835 阅读 · 0 评论