随笔分类 - C#
摘要:原文地址:https://zhuanlan.zhihu.com/p/3161634 C#的闭包,是一个语法糖。 它实质上是将匿名函数转换成一个类,函数作为其中的类方法,并调整外部调用代码来实现的。既然是对象,自然就有自己的堆内存分配。 但它并不是无脑地每次创建委托就生成一个新的对象,而是做了编译期间
阅读全文
摘要:函数式编程 函数式编程(英語:functional programming)或称函数程序设计、泛函编程,是一种编程范式,它将电脑运算视为函数运算,并且避免使用程式状态以及易变物件。其中,λ演算为该语言最重要的基础。而且,λ演算的函数可以接受函数作为输入參數和输出返回值。 比起指令式編程,函數式編程更
阅读全文
摘要:如何理解面向对象的基本特征:封装 我们通过接口 、struct、枚举、委托、泛型、匿名函数的去理解封装 接口 、struct、枚举、委托、泛型、匿名函数有什么区别?我们通过这些IL探究真相,案例如下: class Program { private int se; private delegate
阅读全文
摘要:目录 委托的申明 委托的赋值 泛型委托 委托实例方法的使用C#Invoke\BeginInvoke\Endinoke 系统自带的委托Action、Action<T>、Func<T>、Predicate<T> delegate类方法的使用 MulticastDelegate 多播委托 委托的调用列表
阅读全文
摘要:在C#里面,变量作用域有三种,一种是属于类的,我们常称之为field,第二种则属于函数的,我们通常称之为局部变量,还有一种,其实也是属于函数的,不过它的作用范围更小,它只属于函数局部的代码片段,这种同样称之为局部变量.这三种变量的生命周期基本都可以用一句话来说明,每个变量都属于它所寄存的对象,即变量
阅读全文
摘要:闭包的概念 闭包是一个代码块(在C#中,指的是匿名方法或者Lambda表达式,也就是匿名函数),并且这个代码块使用到了代码块以外的变量,于是这个代码块和用到的代码块以外的变量(上下文)被“封闭地包在一起”。当使用此代码块时,该代码块里使用的外部变量的值,是使用该代码块时的值,并不一定是创建该代码块时
阅读全文
摘要:C#函数式程序设计 CLR via C# 第4版 C# 编程指南 编译原理
阅读全文
摘要:因为所有的类都可以被继承,为了防止类的继承被滥用,C#中提出了密封类的概念。 如果想声明一个类,并且该类不能被其他类所继承。那么使用sealed关键字可以将类和方法封闭起来,使类不能被继承,方法不能被重写 sealed class FinalClass { } 密封类不可以被继承,但是可以继承其他类
阅读全文
摘要:函数的每次调用都有与之紧密相关的作用域和上下文。从根本上来说,作用域是基于函数的,而上下文是基于对象的。 https://www.cnblogs.com/sxhlf/p/6727486.html https://blog.csdn.net/shyc1922/article/details/68764
阅读全文
摘要:目录 匿名方法定义 匿名方法的声明匿名方法的使用范围捕获局部变量或实例状态匿名函数会捕获变量,并延长对象的生命周期结束匿名方法捕获局部变量-静态匿名函数 匿名方法定义: 匿名方法是没有名称只有主体的方法。 在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。 匿名方法是通
阅读全文
摘要:计算机组成原理 1、为什么计算的补数(补码)=反码+1? 题目 http://blog.zhaojie.me/2011/03/my-interview-questions-for-dotnet-programmers.html 1、考察对常量和自读字段 初始化过程的了解 static readonl
阅读全文
摘要:常量的定义 常量是在编译时设置其值并且永远不能更改其值的字段。 使用常量可以为特殊值提供有意义的名称,而不是数字文本 常量是不可变的值,在编译时是已知的,在程序的生命周期内不会改变。 常量使用 const 修饰符声明。 仅 C# 内置类型(不包括 System.Object)可声明为 const。
阅读全文
摘要:逆变(Contravariance)/协变(Covariance) 1. 基本概念 官方: 协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型。协变/逆变只支持委托、泛型接口。数组由于历史的原因
阅读全文
摘要:强制转换和类型转换 隐式转换:由于这种转换始终会成功且不会导致数据丢失,因此无需使用任何特殊语法。 示例包括从较小整数类型到较大整数类型的转换以及从派生类到基类的转换。 显式转换(强制转换) :必须使用 强制转换表达式,才能执行显式转换。 在转换中可能丢失信息时或在出于其他原因转换可能不成功时,必须
阅读全文
摘要:SOLID:面向对象设计的五个基本原则 文|阿里巴巴淘系技术 田航(马刺) 在程序设计领域,SOLID 是由罗伯特·C·马丁在 21 世纪早期引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,能够使得一个程序员开发一个容易进行维护和扩展的系统变得更加可
阅读全文
摘要:StopWatch 时间计数器简介: Stopwatch 可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。一般用来测量代码执行所用的时间或者计算性能数据,在优化代码性能上可以使用Stopwatch来测量时间。 在多处理器计算机上,线程在哪个处理器上运行并不重要。 但是,由于 BI
阅读全文
摘要:在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢。 数组 数组在C#中最早出现的。在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。 //数组 string[] s=new string[2]; //赋值 s[0]="a"; s[1
阅读全文
摘要:参考链接:https://www.cnblogs.com/tdfblog/p/Nullable-Types-in-Csharp-Net.html https://www.cnblogs.com/minotauros/p/10041644.html 启用 可空上下文 从C#8.0开始,我们可以通过启用
阅读全文
摘要:1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。例如:string str=null; 是正确的,int i=null; 编译器就会报错。为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符"?"来表示,表现形式为"T?"例如:int? 表示可
阅读全文
摘要:两种方式实现表链:第二种性能差 using System; using System.Collections; namespace Galaxy { class Program { static void Main(string[] args) { SnakList<string> san = ne
阅读全文