随笔分类 - C#
推荐书籍:《深入理解C#》、《CLR via C#》、《Effective C#》、《C#多线程编程实战》
摘要:前言 一个老掉牙的话题,园子里的相关优秀文章已经有很多了,我写这篇文章完全是想以自己的思维方式来谈一谈自己的理解。(PS:文中涉及到了大量反编译源码,需要静下心来细细品味) 从简单开始 为了更容易理解这个问题,我们举一个简单的例子:用异步的方式在控制台上分两步输出“Hello World!”,我这边
阅读全文
摘要:原文:https://devblogs.microsoft.com/pfxteam/executioncontext-vs-synchronizationcontext/ 作者:Stephen 翻译:xiaoxiaotank 不来深入了解一下? 为了更好的理解本文内容,强烈建议先看一下理解C#中的C
阅读全文
摘要:原文:https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获。 七年前(原文发布于2019年).NET的编程语言和框架库添加了async/await语法糖。自那
阅读全文
摘要:原文:https://devblogs.microsoft.com/dotnet/understanding-the-whys-whats-and-whens-of-valuetask/ 作者:Stephen 翻译:xiaoxiaotank 备注:本文要求读者对Task有一定的了解,文章文字描述较多
阅读全文
摘要:从C# 4.0开始,泛型接口和泛型委托都支持协变和逆变,由于历史原因,数组也支持协变。 里氏替换原则:任何基类可以出现的地方,子类一定可以出现。 协变(out) 协变:即自然的变化,遵循里氏替换原则,表现在代码上则是任何基类都可以被其子类赋值,如Animal = Dog、Animal = Cat 使
阅读全文
摘要:去年在CSDN上写的,现在把它搬过来。 一、引发问题 用了那么久的 ref 和 out ,你真的了解它们是如何使得实参与形参的值保持同步的吗? 二、研究前提 要研究这个问题,前提是要了解 C# 中方法间参数是如何传递的: 1.CLR支持两种类型:值类型和引用类型。 a. 值类型:值一般保存在线程栈上
阅读全文
摘要:一、基础 首先,为了深入了解垃圾回收(GC),我们要了解一些基础知识: CLR:Common Language Runtime,即公共语言运行时,是一个可由多种面向CLR的编程语言使用的“运行时”,包括内存管理、程序集加载、安全性、异常处理和线程同步等核心功能。 托管进程中的两种内存堆: 托管堆:C
阅读全文
摘要:这里直接给出C 类成员一般初始化顺序: 1. 子类静态字段 1. 子类静态构造 1. 子类实例字段 1. 父类静态字段 1. 父类静态构造 1. 父类实例字段 1. 父类实例构造 1. 子类实例构造 为什么说是“一般”初始化顺序呢?因为根据类结构的不同,类成员的初始化顺序并不是一成不变的。但是这个顺
阅读全文