摘要: FluentValidation第三方验证框架 引用包 FluentValidation FluentValidation.AspNetCore Core配置: services.AddMvc() .AddFluentValidation(fv => //配置第三方输入验证 fv.RegisterV 阅读全文
posted @ 2020-05-29 15:20 delafqm 阅读(514) 评论(0) 推荐(0) 编辑
摘要: [ C# 3.0/.NET 3.x 新增特性 ] 2.1 初识LINQ:类似SQL风格的代码 LINQ又称语言集成查询,它是C# 3.0的新语法。在更多的人看来,它是一种方便的查询表达式,或者说是和SQL风格接近的代码。 var maleList = from p in personList whe 阅读全文
posted @ 2020-05-29 11:53 delafqm 阅读(107) 评论(0) 推荐(0) 编辑
摘要: [ C# 3.0/.NET 3.x 新增特性 ] 标准查询运算符提供了包括筛选、投影、聚合、排序等功能在内的查询功能,其本质是定义在System.Linq.Enumerable类中的50多个为IEnumerable<T>准备的扩展方法。 从上图可以看出,在Enumerable类中提供了很多的扩展方法 阅读全文
posted @ 2020-05-29 11:50 delafqm 阅读(378) 评论(0) 推荐(0) 编辑
摘要: [ C# 3.0/.NET 3.x 新增特性 ] 回顾,发现上面的代码,需要传一个 匿名方法 ,写起来特别别扭。于是我们很想知道能否有简化的语法呢?微软告诉咱们:Of Course,必须有,它就是Lambda表达式。Lambda表达式是比匿名方法更简洁的一种匿名方法语法。 Lambda来源:1920 阅读全文
posted @ 2020-05-29 11:46 delafqm 阅读(144) 评论(0) 推荐(0) 编辑
摘要: MSDN给出的定义:表示比较同一类型的两个对象的方法。 它的定义也很简单: public delegate int Comparison<in T>(T x, T y) T是要比较的对象的类型,而返回值是一个有符号整数,指示 x 与 y 的相对值,如下表所示: 值 含义 小于 0 x 小于 y。 0 阅读全文
posted @ 2020-05-29 11:45 delafqm 阅读(1050) 评论(0) 推荐(0) 编辑
摘要: 3.1 初识Predicate 经过了Func的了解,我们可以知道接下来的这两个Predicate和Comparison其实都属于有返回值类型的委托,他们不过是两个具体的特殊实例而已(一个返回bool类型,一个返回int类型)。 MSDN给出的定义:表示定义一组条件并确定指定对象是否符合这些条件的方 阅读全文
posted @ 2020-05-29 11:43 delafqm 阅读(859) 评论(0) 推荐(0) 编辑
摘要: 2.1 初识Func MSDN给出的定义:封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。 此委托的定义如下: public delegate TResult Func<in T, out TResult>(T arg) (1)in T :此委托封装的方法的参数类型。 (2)ou 阅读全文
posted @ 2020-05-29 11:41 delafqm 阅读(3821) 评论(0) 推荐(0) 编辑
摘要: 1.1 初识Action MSDN给出的定义:封装一个方法,该方法不具有参数并且不返回值。 可以使用此委托以参数形式传递方法,而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法不得具有参数,并且不得返回值。(在 C# 中,该方法必须返回 void)通常,这种 阅读全文
posted @ 2020-05-29 11:37 delafqm 阅读(1100) 评论(0) 推荐(0) 编辑
摘要: [ C# 3.0/.NET 3.x 新增特性 ] 3.1 神奇—初玩扩展方法 (1)提到扩展方法,我想大部分的园友都不陌生了。不过还是来看看MSDN的定义: MSDN 说:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。这里的“添加”之所以使用引号, 阅读全文
posted @ 2020-05-29 11:35 delafqm 阅读(161) 评论(0) 推荐(0) 编辑
摘要: [ C# 2.0/.NET 2.0 新增特性 ] 2.1 从委托的声明说起 C#中的匿名方法是在C#2.0引入的,它终结了C#2.0之前版本声明委托的唯一方法是使用命名方法的时代。不过,这里我们还是看一下在没有匿名方法之前,我们是如何声明委托的。 (1)首先定义一个委托类型: public dele 阅读全文
posted @ 2020-05-29 11:33 delafqm 阅读(686) 评论(0) 推荐(0) 编辑
摘要: [ C# 3.0/.NET 3.x 新增特性 ] 1.1 不好意思,我匿了 在开发中,我们有时会像下面的代码一样声明一个匿名类:可以看出,在匿名类的语法中并没有为其命名,而是直接的一个new { }就完事了。从外部看来,我们根本无法知道这个类是干神马的,也不知道它有何作用。 var annoyCla 阅读全文
posted @ 2020-05-29 11:29 delafqm 阅读(4687) 评论(0) 推荐(0) 编辑
摘要: [ C# 3.0/.NET 3.x 新增特性 ] 4.1 属性初始化器 (1)在开发中,我们经常会这些为new出来的对象设置属性: static void InitialPropertyFunc() { Person p = new Person() { Name = "小强", Age = 18 阅读全文
posted @ 2020-05-29 11:26 delafqm 阅读(335) 评论(0) 推荐(0) 编辑
摘要: [ C# 4.0/.NET 4.0 新增特性 ] 3.1 带默认值的方法 static void Main(string[] args) { // 01.带默认值参数函数 FuncWithDefaultPara(); // 02.省略一个默认参数调用 FuncWithDefaultPara(1008 阅读全文
posted @ 2020-05-29 11:24 delafqm 阅读(1716) 评论(0) 推荐(0) 编辑
摘要: [ C# 3.0/.Net 3.x 新增特性 ] 2.1 犹抱琵琶半遮面—你能猜出我是谁? 以前,我们在定义每个变量时都需要明确指出它是哪个类型。但是,当有了var之后,一切变得那么和谐,我们可以用一个var定义所有的类型。 var age = 100; age += 150; var name = 阅读全文
posted @ 2020-05-29 11:22 delafqm 阅读(165) 评论(0) 推荐(0) 编辑
摘要: [ C# 3.0/.Net 3.x 新增特性 ] 1.1 以前的做法:先写私有变量,再写公有属性 public class Student { private Int32 _id; public Int32 Id { get { return _id; } set { _id = value; } 阅读全文
posted @ 2020-05-29 11:21 delafqm 阅读(2404) 评论(0) 推荐(2) 编辑
摘要: 通用的语言基础是.NET运行的基础,当我们对程序运行的结果有异议的时候,如何透过本质看表面,需要我们从底层来入手探索,这时候,IL便是我们必须知道的基础。 一、IL基础概念 1.1 什么是IL? IL是.NET框架中间语言(Intermediate Language)的缩写。使用.NET框架提供的编 阅读全文
posted @ 2020-05-29 11:02 delafqm 阅读(763) 评论(0) 推荐(0) 编辑
摘要: 3.1 理解同步块和同步块索引 同步块是.NET中解决对象同步问题的基本机制,该机制为每个堆内的对象(即引用类型对象实例)分配一个同步索引,该索引中只保存一个表明数组内索引的整数。具体过程是:.NET在加载时就会新建一个同步块数组,当某个对象需要被同步时,.NET会为其分配一个同步块,并且把该同步块 阅读全文
posted @ 2020-05-29 10:54 delafqm 阅读(410) 评论(0) 推荐(0) 编辑
摘要: .NET为多线程编程提供了丰富的类型和机制,程序员需要做的就是掌握这些类型和机制的使用方法和运行原理。 2.1 如何在.NET程序中手动控制多个线程? .NET中提供了多种实现多线程程序的方法,但最直接且灵活性最大的,莫过于主动创建、运行、结束所有线程。 (1)第一个多线程程序 .NET提供了非常直 阅读全文
posted @ 2020-05-29 10:49 delafqm 阅读(1729) 评论(0) 推荐(2) 编辑
摘要: 下面的一些基本概念可能和.NET的联系并不大,但对于掌握.NET中的多线程开发来说却十分重要。我们在开始尝试多线程开发前,应该对这些基础知识有所掌握,并且能够在操作系统层面理解多线程的运行方式。 1.1 操作系统层面的进程和线程 (1)进程 进程代表了操作系统上运行着的一个应用程序。进程拥有自己的程 阅读全文
posted @ 2020-05-29 10:44 delafqm 阅读(210) 评论(0) 推荐(1) 编辑
摘要: 特性机制可以帮助程序员以申明的方式进行编程,而不再需要考虑实现的细节。 4.1 神马是特性?如何自定义一个特性? (1)特性是什么? 特性是一种有别于普通命令式编程的编程方式,通常被称为申明式编程方式。所谓申明式编程方式就是指程序员只需要申明某个模块会有怎样的特性,而无需关心如何去实现。下面的代码就 阅读全文
posted @ 2020-05-29 10:42 delafqm 阅读(144) 评论(0) 推荐(0) 编辑