原文:https://blogs.msdn.microsoft.com/mazhou/2017/11/21/c-7-series-part-6-read-only-structs/ 背景 在.NET世界中,有两种基本类型:引用类型和值类型.简单地说,引用类型是可以继承/扩展的类,当传递引用类型对象时,传递的是一个“指针”:值类型是不能继承/扩展的结构,当传递值类型对象时,传递的是一个“副本”. C#中的struct是一个值类型,它“内部继承”自System.ValueType.(我说的是结构之间…
原文:https://blogs.msdn.microsoft.com/mazhou/2018/03/02/c-7-series-part-9-ref-structs/ 背景 在之前的文章中,我解释了许多新的C#特性,每一个特性都是为了增强语言或者解决问题而引入的.具体来说,我解释了值类型和引用类型.按值传递参数.按引用传递参数.ref局部变量和ref返回结果以及in参数.这其中许多功能是为高性能场景设计的. ref和in参数可以帮助避免复制值,从而减少内存分配.当你有分配在堆栈的局部变量作为方…
原文:https://blogs.msdn.microsoft.com/mazhou/2018/01/08/c-7-series-part-8-in-parameters/ 背景 默认情况下,方法参数是通过值传递的.也就是说,参数被复制并传递到方法中.因此,修改方法体中的参数不会影响原始值.在大多数情况下,修改是不必要的. 其他编程语言,如C++,有一个const参数或类似的概念:这表明方法体中的参数是一个不能被重新赋值的常量.它有助于避免在方法体内无意中重新赋值一个方法参数的错误,并通过不允许…
原文:https://blogs.msdn.microsoft.com/mazhou/2017/05/30/c-7-series-part-2-async-main/ 你大概知道,C#语言可以构建两种程序.一种是带有入口点(entrypoint)的程序,这样操作系统就可以加载程序并从入口点执行;另一个是没有入口点的程序.操作系统不能直接执行程序,程序可以被其他有入口点的程序引用,这样就可以执行其中的代码. 必须有入口点的应用程序类型有:Windows Forms应用程序.UWP应用程序.控制台应…
原文:https://blogs.msdn.microsoft.com/mazhou/2017/06/06/c-7-series-part-3-default-literals/ C#的default关键字有两种用法:一种是标记switch…case结构的默认分支(会匹配任意不被所有case条件匹配的路径);另一种方法是表示类型的“默认”值.我将在本文中讨论这个用法. 一个类型的默认值: 如果类型是引用类型,则为空 如果类型是值类型,则使用这个值类型的无参数构造函数构造出来的实例. 下面的截图是…
原文:https://blogs.msdn.microsoft.com/mazhou/2017/06/27/c-7-series-part-4-discards/ 有时我们想要忽略一个方法返回的值,特别是那些out参数,一个典型的例子是检查一个字符串是否可以解析成另一种类型: bool parsedValue; if (bool.TryParse("TRUE", out parsedValue)) { /* 其他代码 */ } 这里我们要忽略parsedValue.我们还希望使这个变量…
原文:https://blogs.msdn.microsoft.com/mazhou/2017/10/05/c-7-series-part-5-private-protected/ C#有几个可访问性修饰符,public.internal.internal protected和private. public: 具有此可访问性声明的成员可以在此成员所在程序集中或引用该成员所在程序集的任何其他程序集中可见.也就是说,访问不受限制. internal:具有此可访问性声明的成员可以在此成员所在程序集中可…
原文:https://blogs.msdn.microsoft.com/mazhou/2017/12/12/c-7-series-part-7-ref-returns/ 背景 有两种方法可以将一个值传递给一个方法: 按值传递.当一个参数被传递给一个方法时,一个参数的副本(如果它是一个值类型)或一个"参数引用"的副本(如果它是一个引用类型)被传递.当您更改方法中的参数时,更改(单个赋值或复合赋值)会反映到参数/"参数引用"的副本,而不会反映到参数或“参数引用”本身.这…
原文:https://blogs.msdn.microsoft.com/mazhou/2018/03/25/c-7-series-part-10-spant-and-universal-memory-management/ 译注:这是本系列最后一篇文章 背景 .NET是一个托管平台,这意味着内存访问和管理是安全的.自动的.所有类型都是由.NET完全管理的,它在执行栈或托管堆上分配内存. 在互操作的事件或低级别开发中,你可能希望访问本机对象和系统内存,这就是为什么会有互操作这部分了,有一部分类型可…
Mark Zhou写了很不错的一系列介绍C# 7的文章,虽然是2年多年前发布的,不过对于不熟悉C# 7特性的同学来说,仍然有很高的阅读价值. 原文:https://blogs.msdn.microsoft.com/mazhou/2017/05/26/c-7-series-part-1-value-tuples/ 译文: 从今天开始,我将开始一个新的C# 7系列文章,介绍C# 7+的新语言特性.请注意,我说的不是C# 7.0,我说的是C# 7+,因为将会有一些小的版本(比如7.1.7.2)逐步引入…