摘要: #region和#endregion的作用 折叠 收纳代码,对代码进行分组,让代码容易阅读 #region add(x,y) public static void Add(int x, int y) { Console.WriteLine("{0} + {1} = {2}", x, y, x + y 阅读全文
posted @ 2021-10-03 10:27 小林野夫 阅读(96) 评论(0) 推荐(0)
摘要: C#委托Action、Action<T>、Func<T>、Predicate<T> CLR环境中给我们内置了几个常用委托Action、 Action<T>、Func<T>、Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个委托了,就用系统内置的这几个已经能够满足大部分的需求 阅读全文
posted @ 2021-10-02 19:02 小林野夫 阅读(372) 评论(0) 推荐(0)
摘要: 参考:https://www.cnblogs.com/markkang/p/14130867.html 什么是模式匹配? 在特定的上下文中,模式匹配是用于检查所给对象及属性是否满足所需模式(即是否符合一定标准)并从输入中提取信息的行为。它是一种新的代码流程控方式,它能使代码流可读性更强。这里说到的标 阅读全文
posted @ 2021-10-01 15:43 小林野夫 阅读(803) 评论(0) 推荐(0)
摘要: 元组的解构是C#内置支持的。 var countrInfo = ("Malawi", "Lilongwe", io); (string name, string ii, var gdpPerCapit) = countrInfo; 对于非元组类型的解构,C# 不提供内置支持。但是,用户作为类、结构或 阅读全文
posted @ 2021-10-01 15:31 小林野夫 阅读(605) 评论(0) 推荐(0)
摘要: 文章来源: 青水白凡 C#中 Var关键字 Var是C#3.5新增的一个关键字,用来代替某些具体的类型,由编译器自动判断变量类型,编译器可以根据变量的初始化值“推断”变量的类型。 其主要作用有2个: 1.代替具体类型,实现快速编程的隐式类型用法,常见在foreach便历中,实质是VS编译器给我们提供 阅读全文
posted @ 2021-10-01 09:56 小林野夫 阅读(372) 评论(0) 推荐(0)
摘要: 原文地址:https://zhuanlan.zhihu.com/p/3161634 C#的闭包,是一个语法糖。 它实质上是将匿名函数转换成一个类,函数作为其中的类方法,并调整外部调用代码来实现的。既然是对象,自然就有自己的堆内存分配。 但它并不是无脑地每次创建委托就生成一个新的对象,而是做了编译期间 阅读全文
posted @ 2021-09-30 19:02 小林野夫 阅读(164) 评论(0) 推荐(0)
摘要: 函数式编程 函数式编程(英語:functional programming)或称函数程序设计、泛函编程,是一种编程范式,它将电脑运算视为函数运算,并且避免使用程式状态以及易变物件。其中,λ演算为该语言最重要的基础。而且,λ演算的函数可以接受函数作为输入參數和输出返回值。 比起指令式編程,函數式編程更 阅读全文
posted @ 2021-09-30 16:53 小林野夫 阅读(596) 评论(0) 推荐(0)
摘要: 如何理解面向对象的基本特征:封装 我们通过接口 、struct、枚举、委托、泛型、匿名函数的去理解封装 接口 、struct、枚举、委托、泛型、匿名函数有什么区别?我们通过这些IL探究真相,案例如下: class Program { private int se; private delegate 阅读全文
posted @ 2021-09-30 11:34 小林野夫 阅读(80) 评论(0) 推荐(0)
摘要: 目录 委托的申明 委托的赋值 泛型委托 委托实例方法的使用C#Invoke\BeginInvoke\Endinoke 系统自带的委托Action、Action<T>、Func<T>、Predicate<T> delegate类方法的使用 MulticastDelegate 多播委托 委托的调用列表 阅读全文
posted @ 2021-09-30 11:24 小林野夫 阅读(287) 评论(0) 推荐(0)
摘要: 在C#里面,变量作用域有三种,一种是属于类的,我们常称之为field,第二种则属于函数的,我们通常称之为局部变量,还有一种,其实也是属于函数的,不过它的作用范围更小,它只属于函数局部的代码片段,这种同样称之为局部变量.这三种变量的生命周期基本都可以用一句话来说明,每个变量都属于它所寄存的对象,即变量 阅读全文
posted @ 2021-09-29 16:08 小林野夫 阅读(48) 评论(0) 推荐(0)
摘要: 闭包的概念 闭包是一个代码块(在C#中,指的是匿名方法或者Lambda表达式,也就是匿名函数),并且这个代码块使用到了代码块以外的变量,于是这个代码块和用到的代码块以外的变量(上下文)被“封闭地包在一起”。当使用此代码块时,该代码块里使用的外部变量的值,是使用该代码块时的值,并不一定是创建该代码块时 阅读全文
posted @ 2021-09-29 12:30 小林野夫 阅读(3399) 评论(0) 推荐(0)
摘要: C#函数式程序设计 CLR via C# 第4版 C# 编程指南 编译原理 阅读全文
posted @ 2021-09-29 11:54 小林野夫 阅读(186) 评论(0) 推荐(0)
摘要: 因为所有的类都可以被继承,为了防止类的继承被滥用,C#中提出了密封类的概念。 如果想声明一个类,并且该类不能被其他类所继承。那么使用sealed关键字可以将类和方法封闭起来,使类不能被继承,方法不能被重写 sealed class FinalClass { } 密封类不可以被继承,但是可以继承其他类 阅读全文
posted @ 2021-09-28 22:51 小林野夫 阅读(447) 评论(0) 推荐(0)
摘要: 函数的每次调用都有与之紧密相关的作用域和上下文。从根本上来说,作用域是基于函数的,而上下文是基于对象的。 https://www.cnblogs.com/sxhlf/p/6727486.html https://blog.csdn.net/shyc1922/article/details/68764 阅读全文
posted @ 2021-09-28 21:29 小林野夫 阅读(168) 评论(0) 推荐(0)
摘要: 目录 匿名方法定义 匿名方法的声明匿名方法的使用范围捕获局部变量或实例状态匿名函数会捕获变量,并延长对象的生命周期结束匿名方法捕获局部变量-静态匿名函数 匿名方法定义: 匿名方法是没有名称只有主体的方法。 在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。 匿名方法是通 阅读全文
posted @ 2021-09-28 19:20 小林野夫 阅读(891) 评论(0) 推荐(0)
摘要: 计算机组成原理 1、为什么计算的补数(补码)=反码+1? 题目 http://blog.zhaojie.me/2011/03/my-interview-questions-for-dotnet-programmers.html 1、考察对常量和自读字段 初始化过程的了解 static readonl 阅读全文
posted @ 2021-09-28 14:22 小林野夫 阅读(174) 评论(0) 推荐(0)
摘要: 常量的定义 常量是在编译时设置其值并且永远不能更改其值的字段。 使用常量可以为特殊值提供有意义的名称,而不是数字文本 常量是不可变的值,在编译时是已知的,在程序的生命周期内不会改变。 常量使用 const 修饰符声明。 仅 C# 内置类型(不包括 System.Object)可声明为 const。 阅读全文
posted @ 2021-09-28 13:50 小林野夫 阅读(1170) 评论(0) 推荐(0)
摘要: 逆变(Contravariance)/协变(Covariance) 1. 基本概念 官方: 协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型。协变/逆变只支持委托、泛型接口。数组由于历史的原因 阅读全文
posted @ 2021-09-26 21:58 小林野夫 阅读(539) 评论(0) 推荐(0)
摘要: 强制转换和类型转换 隐式转换:由于这种转换始终会成功且不会导致数据丢失,因此无需使用任何特殊语法。 示例包括从较小整数类型到较大整数类型的转换以及从派生类到基类的转换。 显式转换(强制转换) :必须使用 强制转换表达式,才能执行显式转换。 在转换中可能丢失信息时或在出于其他原因转换可能不成功时,必须 阅读全文
posted @ 2021-09-26 19:40 小林野夫 阅读(277) 评论(0) 推荐(0)
摘要: SOLID:面向对象设计的五个基本原则 文|阿里巴巴淘系技术 田航(马刺) 在程序设计领域,SOLID 是由罗伯特·C·马丁在 21 世纪早期引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,能够使得一个程序员开发一个容易进行维护和扩展的系统变得更加可 阅读全文
posted @ 2021-09-26 18:15 小林野夫 阅读(255) 评论(0) 推荐(0)
摘要: StopWatch 时间计数器简介: Stopwatch 可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。一般用来测量代码执行所用的时间或者计算性能数据,在优化代码性能上可以使用Stopwatch来测量时间。 在多处理器计算机上,线程在哪个处理器上运行并不重要。 但是,由于 BI 阅读全文
posted @ 2021-09-26 14:59 小林野夫 阅读(506) 评论(0) 推荐(0)
摘要: 在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢。 数组 数组在C#中最早出现的。在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。 //数组 string[] s=new string[2]; //赋值 s[0]="a"; s[1 阅读全文
posted @ 2021-09-26 13:58 小林野夫 阅读(537) 评论(0) 推荐(0)
摘要: 参考链接:https://www.cnblogs.com/tdfblog/p/Nullable-Types-in-Csharp-Net.html https://www.cnblogs.com/minotauros/p/10041644.html 启用 可空上下文 从C#8.0开始,我们可以通过启用 阅读全文
posted @ 2021-09-25 16:54 小林野夫 阅读(261) 评论(0) 推荐(0)
摘要: 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。例如:string str=null; 是正确的,int i=null; 编译器就会报错。为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符"?"来表示,表现形式为"T?"例如:int? 表示可 阅读全文
posted @ 2021-09-25 14:19 小林野夫 阅读(3331) 评论(0) 推荐(0)
摘要: 两种方式实现表链:第二种性能差 using System; using System.Collections; namespace Galaxy { class Program { static void Main(string[] args) { SnakList<string> san = ne 阅读全文
posted @ 2021-09-24 11:50 小林野夫 阅读(75) 评论(0) 推荐(0)
摘要: 原文:https://www.cnblogs.com/huguodong/p/12694902.html 一、前言 VisualStudio 可以通过敲出缩写字符串,然后按两次Tab按键自动展开成一段对应语义的代码。 敲缩写cw: 然后按两次Tab会自动展开成 我们可以通过VisualStudio中 阅读全文
posted @ 2021-09-23 20:32 小林野夫 阅读(225) 评论(0) 推荐(0)
摘要: 再这个案例中我们,为什么要使用泛型约束 使用约束的原因 约束指定类型参数的功能和预期。 声明这些约束意味着你可以使用约束类型的操作和方法调用。 如果泛型类或 方法对泛型成员使用除简单赋值之外的任何操作或调用 System.Object 不支持的任何方法,则将对类型参数应用 约束。 例如,基类约束告诉 阅读全文
posted @ 2021-09-23 19:25 小林野夫 阅读(165) 评论(0) 推荐(0)
摘要: //本文是根据C#编程指南修改的。编程指南很多是机器翻译的,很多句子根本读不懂。所以本人就把读不懂地方标出来。 不理解 :1、defalut约束 2、泛型接口不理解的地方 3、泛型方法中的不理解的地方 一、文章目录 1、泛型的简介绍 2、泛型类型参数命名指南 3、类型参数的约束 3.1为什么要使用类 阅读全文
posted @ 2021-09-23 17:28 小林野夫 阅读(126) 评论(0) 推荐(0)
摘要: 官方:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/interfaces/explicit-interface-implementation 本示例声明一个接口IDimensions 和一个类 Box,显式实现了接口 阅读全文
posted @ 2021-09-22 22:44 小林野夫 阅读(1513) 评论(0) 推荐(2)
摘要: 在类、结构或接口中定义的类型称为嵌套类型。 例如 public class Container { class Nested { Nested() { } } } 不论外部类型是类、接口还是构造,嵌套类型均默认为 private;仅可从其包含类型中进行访问。 在上一个示例中,Nested 类无法访问 阅读全文
posted @ 2021-09-22 10:14 小林野夫 阅读(253) 评论(0) 推荐(0)
摘要: 反编译后,迭代器用的是状态机,栈本身就是状态机,由于协程本身也有栈, 我怀疑C#中的 迭代器和基于任务的异步编程是协程(未经过验证) .class nested private auto ansi sealed beforefieldinit '<GetEnumerator>d__12' exten 阅读全文
posted @ 2021-09-22 01:52 小林野夫 阅读(124) 评论(0) 推荐(0)
摘要: .ctor,.cctor 以及 对象的构造过程 一点关于.ctor、.cctor以及对象构造过程的总结 .ctor(structor): 简述:构造函数,在类被实例化时,它会被自动调用。 当C#的类被编译后,在IL代码中会出现一个名为.ctor的方法,它就是我们的构造函数,对应C#中的构造函数。且看 阅读全文
posted @ 2021-09-20 13:26 小林野夫 阅读(1130) 评论(0) 推荐(1)
摘要: 探讨关于C#中Foreach的本质 要实现foreach需要满足什么条件? 只要类中实现类中的GetEnumerator()方法、MoveNext()方法、Current属性(俗称鸭子类型)都可以使用foreach进行遍历。 所以只要继承IEnumerable或IEnumerator、集合类、数组 阅读全文
posted @ 2021-09-20 12:48 小林野夫 阅读(614) 评论(0) 推荐(0)
摘要: 总结:1、扩展方法最好单独放在一个命名空间里面。 2、扩展方法必须是放在静态类里面,扩展方法的定义必须具有文件作用域,也就是说必须在文件中某个命名空间下直接定义,不能嵌套在另一个类中定义; 3、扩展方法必须是静态方法,扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。说明静态方法相当被扩 阅读全文
posted @ 2021-09-19 15:18 小林野夫 阅读(3928) 评论(0) 推荐(0)
摘要: 原文:https://www.cnblogs.com/luminji/archive/2011/03/29/1997812.html IDisposable高级篇:https://docs.microsoft.com/zh-cn/dotnet/standard/garbage-collection/ 阅读全文
posted @ 2021-09-19 01:05 小林野夫 阅读(225) 评论(0) 推荐(0)
摘要: 接口就是一种抽象类,接口扶着抽象动作行为,抽象类负责抽象类,结构负责抽象数据。 总结: (1)接口是对一类事物属性和行为的高度抽象,对修改关闭,对扩展开放,接口是开闭原则的一种体现 (2)抽象类是“不完全”的类,是接口和具体类的一个中间层,既满足接口的抽象,又满足具体的实现 区别: (1)abstr 阅读全文
posted @ 2021-09-18 18:35 小林野夫 阅读(959) 评论(0) 推荐(0)
摘要: 析构方法是在垃圾回收、释放资源时使用的。析构函数用于析构类的实例。备注: 不能在结构中定义析构函数。只能对类使用析构函数。 一个类只能有一个析构函数。 无法继承或重载析构函数。 无法调用析构函数。它们是被自动调用的。 析构函数既没有修饰符,也没有参数。析构方法的定义语法形式如下。!!!!!!!!!! 阅读全文
posted @ 2021-09-18 17:58 小林野夫 阅读(1419) 评论(0) 推荐(0)
摘要: 糕点就是实例 磨具就是类:磨具提供生产糕点的方法、外观等 这就是静态成员,他属于磨具。 对于静态成员的和实例存储区域的理解 糕点生产出来以后单独放在礼品盒里面,不可能盒和磨具一起打包出售,所以他们存储区自然不一样。那么类和实例的存储道理不也是一样的 阅读全文
posted @ 2021-09-18 14:44 小林野夫 阅读(50) 评论(0) 推荐(0)
摘要: 原理:静态成员是和实例成员的存储和管理方式不一样。 静态成员:被static修饰的成员,叫做静态成员。静态成员是属于类的。通过类名直接访问。 当类第一次被访问的时候,就会将这个类下面的所有的静态成员创建在内存当中。 静态成员既不在栈也不在堆中。创建在静态存储区。 静态成员只创建一次,在类第一次被访问 阅读全文
posted @ 2021-09-18 14:06 小林野夫 阅读(312) 评论(0) 推荐(0)
摘要: 构造函数(C# 编程指南) 构造函数概述 使用构造函数 构造函数分类 实例构造函数 私有构造函数 静态构造函数 构造函数概述 每当创建类或结构时,将会调用其构造函数。 类或结构可能具有采用不同参数的多个构造函数。 使用构造函数,程序员能够设置默认值、限制实例化,并编写灵活易读的代码。 有关详细信息和 阅读全文
posted @ 2021-09-18 11:45 小林野夫 阅读(409) 评论(0) 推荐(0)
原文链接:https://www.cnblogs.com/cdaniu/