![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
HueiFeng
格局决定梦想。
展开
-
MSIL入门(二)通过对象看IL
前言上一篇文章主要介绍了IL的概念以及基础的示例代码,在这一篇文章中我们将通过对象调用看IL。创建对象与调用方法class Program{ static void Main(string[] args) { var obj = new MyClass(); Console.WriteLine(obj.Say()); }}class MyClass{ private const string Str = "Hello";原创 2020-08-17 11:55:35 · 141 阅读 · 0 评论 -
MSIL入门(一)C#代码与IL代码对比
基础概念Microsoft中间语言(MSIL),也成为通用中间语言(CIL),是一组与平台无关的指令,由特定于语言的编译器从源代码生成。MSIL是独立于平台的,因此,他可以在任何公共语言基础架构支持特定的环境上执行。通过JIT编译器将MSIL转换为特定计算机环境的特定机器代码。这是在执行MSIL之前完成的,同样,MSIL在需求的基础上转换为机器代码,既JIT编译器根据需要而不是整个MSIL进行编译。公共语言运行时(CLR)中的执行过程:执行过程包括创建MSIL以及通过JIT编译器将MSIL转换为机器代原创 2020-07-07 20:41:54 · 990 阅读 · 0 评论 -
修改Nuget包默认存放路径
默认情况下所有的Nuget包都会下载到C盘,目前我这边有几十个G的大小,这导致我C盘的容量越来越小…我们可以在Nuget.config中修改package存放路径,C:\Users\{UserName}\AppData\Roaming\NuGet默认如下所示<?xml version="1.0" encoding="utf-8"?><configuration> <packageSources> <add key="nuget.org" valu原创 2020-06-04 11:44:31 · 3115 阅读 · 0 评论 -
.NET ValueTuple使用WhenAll获取多个任务结果
在.NET中,我们可以通过Task.WhenAll用来等待多个任务。任务完成之后,我们可以使用await等待他们来获取结果。Task<int> task1 = Task.Run(() => 1);Task<string> task2 = Task.Run(() => "hello");await Task.WhenAll(task1, task2);var task1Result = task1.Result; // or await task1var tas原创 2020-05-26 21:16:38 · 599 阅读 · 0 评论 -
ASP.NET Core中处理中止的请求
当用户向应用程序发出请求时,服务器将解析该请求,生成响应,然后将结果发送给客户端。用户可能会在服务器处理请求的时候中止请求。就比如说用户跳转到另一个页面中获取说关闭页面。在这种情况下,我们希望停止所有正在进行的工作,以浪费不必要的资源。例如我们可能要取消SQL请求、http调用请求、CPU密集型操作等。ASP.NET Core提供了HTTPContext.RequestAborted检测客户端何时断开连接的属性,我们可以通过IsCancellationRequested以了解客户端是否中止连接。[Api原创 2020-05-26 20:51:32 · 605 阅读 · 0 评论 -
C#设计模式之订阅发布模式
什么是Pub-Sub发布订阅是一种设计模式,它允许应用程序组件之间进行松散耦合。其实订阅发布设计中主要是发布者生成事件通道,用于在不了解任何订阅者存在的情况下通知订阅者。当然委托EventHandlers和Event关键字在此事件处理机制中担任着重要的角色。下面我们来看看如何使用它们。Pub和Sub的使用首先我们看一个简单地订阅发布模式.定义一个Action委托,无返回值.namespace PubSubPattern{ public class Pub {原创 2020-05-21 21:13:31 · 1927 阅读 · 1 评论 -
ASP.NET 开源导入导出库Magicodes.IE 完成Csv导入导出
Magicodes.IE Csv导入导出说明本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出.主要步骤1.安装包Magicodes.IE.CsvInstall-Package Magicodes.IE.Csv2.使用Magicodes.IE.Csv导出Csv通过如下代码片段我们将导出的内容通过相应的特性做出相应的处理.ExporterHeaderAttributeDisplayName: 显示名称Format: 格式化IsIgnore: 是否忽略 p原创 2020-05-14 09:58:05 · 274 阅读 · 0 评论 -
ASP.NET Core依赖注入(DI)
ASP.NET Core允许我们指定注册服务的生存期.服务实例将根据指定的生存时间自动处理.因此,我们无需担心清理此依赖关系,他将由ASP.NET Core框架处理.有如下三种类型的生命周期.Microsoft.Extensions.DependencyInjection.ServiceLifetime枚举值public enum ServiceLifetime{ Singleton, Scoped, Transient}Singleton应用程序将在该应用程序生命周期内创建并共享原创 2020-05-12 09:06:05 · 225 阅读 · 0 评论 -
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
依赖倒置原则(DIP)依赖倒置(Dependency Inversion Principle,缩写DIP)是面向对象六大基本原则之一。他是指一种特定的的解耦形式,使得高层次的模块不依赖低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象.该原则规定:高层次的模块不应该依赖低层次模块,二者都应该依赖其抽象接口.抽象接口不应该依赖于具体实现,而具体实现则应该依赖于抽象接口.通过如下一个简单的示例,我们来看一下,我们通过一个简单地下单流程向我们的用户发送相关的原创 2020-05-12 09:05:27 · 242 阅读 · 0 评论 -
ASP.NET 开源导入导出库Magicodes.IE 完成Excel图片导入导出
Magicodes.IE Excel图片导入导出为了更好的根据实际功能来迭代,从2.2的里程碑规划开始,我们将结合社区的建议和意见来进行迭代,您可以点此链接来提交您的意见和建议:https://github.com/dotnetcore/Magicodes.IE/issues/46说明本章教程主要说明如何使用Magicodes.IE.Excel进行图片的导入导出。要点配置DTO进行...原创 2020-03-18 09:04:24 · 353 阅读 · 2 评论 -
SuperBenchmarker一个用.NET编写的压测工具
0x01 前言在这之前想必大家对ab(http)与abs(https)也有一些了解,我们今天不去看ab和abs,SuperBenchmarker(sb.exe)是一个压测工具,他是一个受Apache Benchmark的启发,他会在终端窗口为我们显示最终的结果,同时也会在web界面生成一个动态结果。SuperBenchmarker(sb.exe)可以在Windows或者Mac上运行(尚未在L...原创 2020-03-08 18:19:52 · 390 阅读 · 0 评论 -
C#中Equals和GetHashCode
Equals和GetHashCodeEquals每个实现都必须遵循以下约定:自反性(Reflexive): x.equals(x)必须返回true.对称性(Symmetric): x.equals(y)为true时,y.equals(x)也为true.传递性(Transitive): 对于任何非null的应用值x,y和z,如果x.equals(y)返回true,并且y.equ...原创 2020-01-31 17:06:42 · 1535 阅读 · 0 评论 -
C# 中的IComparable和IComparer
前言在开发过程中经常会遇到比较排序的问题,比如说对集合数组的排序等情况,基本类型都提供了默认的比较算法,如string提供了按字母进行排序,而int整数则是根据整数大小进行排序.但是在引用类型中(具有多个字段),那么这个排序当然也是取决于我们特定的值。IComparable接口该接口由其值可以排序或排序的类型实现,并提供强类型的比较方法以对泛型集合对象的成员进行排序,例如数字可以大于...原创 2020-01-01 15:35:08 · 394 阅读 · 0 评论