一.初步认识.NET Core 和 C#7
- .NET Core的世界
- 可以通过 https://github.com/dotnet/corefx 访问.NET Core的源代码
- .NET Core 命令行可以在 https://github.com/dotnet/cli 上使用
- 在https://github.com/aspnet 上有许多ASP.NET Core的存储库,其中包括ASP.NET Core MVC、Razor、SignalR、EntityFramework Core等
- .NET Core部分特性的总结:
.NET Core是开源的
.NET Core使用现代模式
.NET Core支持在多个平台上开发
ASP.NET Core可以在Windows和Linux上运行
- C#的重要性
- C#一开始不仅作为一种面向对象的通用编程语言,而且是一种基于组件的编程语言,支持属性、事件、特性(注解)和构造程序集(包括元数据的二进制的文件)。
- 随着时间的推移,C#增强了泛型、语言集成查询(LINQ)、lambda表达式、动态特性和更简单的异步编程
- C#不仅是面向对象或基于组件的语言,它还包括函数式编程的理念,开发各种应用程序的通用语言和实际应用这些理念
- C#6中,编译器的源代码完全可以重写了
- C#7再次添加了许多具有函数编程背景的新特性,如本地函数、元祖和模式匹配
- C#7的新特性
- C#6扩展包括static using、基于表达式体的方法和特性、自动实现的属性初始化器、只读自动属性、nameof操作符、空条件运算符、字符串插入、字典初始化器、异常过滤器以及catch中等待
- C#7的新特性:数字分隔符、二进制字面值、表达式体的成员、out变量、不拖尾的命名参数、只读结构、in参数、Private Protected、目标类型的default、本地函数、元祖、推断的元祖名、拆解、模式匹配、Throw表达式、异步Main()方法、引用语义
- GitHub
- git命令的完整列表可以在https://git-scm.com/docs上找到
二.NET历史
- C#1.0 ——一种新语言
- C#0是一种全新的编程语言,用于.NET Framework
- NET编译语言的编译器生成中间语言(IL)代码。IL代码看起来像面向对象的机器码,使用ildasm.exe可以打开包含.NET代码的DLL或EXE文件来检查IL代码(IL代码也称托管代码)
- CLR包含一个即时(JIT)编译器,当程序运行时,JIT编译器会在IL代码中生成本地代码
- CLR的其它部分是垃圾收集器(GC)、调试器扩展、线程实用工具
- 垃圾收集器负责清理不再引用的托管内存,这个安全机制实用代码访问安全性来验证允许代码做什么
- 调试器扩展允许在不同的编程语言之间启动调试会话
- 线程实用工具负责在底层平台上创建线程
- NET3.0 ——Windows Presentation Foundation
- Windows Forms包括本地的Windows控件基于像素
- WPF基于DirectX,独立绘制每个控件
- WPF中的矢量图形允许无缝地调整任何窗体大小
- WPF中的模板允许完全自定义外观
- System.Windows命名空间下的所有内容都属于WPF,除System.Windows.Forms
- WPF的用户界面可以使用XML语法XAML设计
- .NET3.0推出之前,使用的ASP.NET Web Services和.NET Remoting用于程序之间的通信
- Message Queuing是用于通信的另一个选择
- 第三大部分Windows WF 和命名空间System.Workflow
- C#4.0和.NET4.0 ——dynamic和TPL
- C#4.0的主题就是动态集成脚本语言,使其更容易使用COM集成
- 任务并行库(Task Parallel Library,TPL)使用Task类和Parallel类抽象出线程,更容易创建并行运行的代码
- C#5和异步编程
- C#5只有两个新的关键字:async和await,大大简化了异步方法的编程
- System.AddIn名称空间,它提供了插件模型。过于复杂、缓慢。于是.NET4.5创建一个新的合成框架:Managed Extensibility Framework 和命名空间System.Composition
- ASP.NET Web API基于Representational State Transfer(REST)软件架构风格
- C#6和.NET Core 1.0
- Silverlight是一个Web浏览器插集,支持动态内容
- C#7和.NET Core 2.0
1.C#7最重要的部分来自函数式编程:模式匹配和元祖
三.NET术语
一.NET技术
- Xamarin提供了Xamarin.IOS和Xamarin.Android库,它们可以为IPhone和Android开发C#应用程序
- Xamarin目前基于Mono框架,Mono框架是由Xamarin开发的.NET变体
- .NET Core运行库时CoreCLR库,包含集合类的框架、文件系统访问、控制台和XML等都在CoreFX库中
二.NuGet包
- NuGet包是一个zip文件,其中包含程序集(或多个程序集)、配置信息和PowerShell脚本
三.名称空间
1. System.Collections:这是集合的根名称空间。之名称空间也包含集合,如System.Collections.Concurrent和System.Collections.Generic
2. System.Data:这是访问数据库的名称空间。System.Data.SqlClient包含SQL Server的类
3. System.Diagnostics:这是诊断信息的根名称空间,如事件记录和跟踪(在System.Diagnostics.Tracting名称空间中)
4. System.Globalization:包含的类用于全球化和本地化应用程序
5. System.IO:这是文件IO的名称空间,其中的类访问文件和目录,包括读取器、写入器和流
- System.Net:这是核心网络的名称空间,比如访问DNS服务器,用System.Net.Sockets创建套接字
- System.Threading:这是线程和任务的根名称空间。任务在System.Threading.Tasks中定义
- 一些新的.NET类使用名称以Microsoft开头而不是使用System开头的名称空间。
- Microsoft.EntityFrameworkCore用于新的依赖关系注入框架中的Microsoft.Extensions.DependencyInjection
四.公共语言运行库
1. UWP(Windows通用应用平台)利用Native.NET通过AOT Compiler把IL编译成本地代码与Xamarin.IOS相似
2. CLR(公共语言运行库)的作用
在CLR执行应用程序之前,编写好的源代码(使用C#或其它语言编写的代码)都需要编译。
在.NET中,编译分为两个阶段:
- 将源代码编译为Microsoft中间语言(IL)
- CLR把IL(托管代码)编译为平台专用的本地代码
IL代码在.NET程序集可用。在运行时,JIT编译器编译IL代码,创建特定于平台的本地代码
新的CLR和CoreCLR包括一个新的JIT编译器RyuJIT
CLR还包括一个带有类型加载器的类型文件,类型加载器负责从程序集中加载类型。类型系统中的安全基础设施验证是否允许使用某些类型系统结构,如继承
CLR的另一个功能就是垃圾收集器。垃圾收集器从托管堆中清除不再引用的内存
CLR还负责线程的处理。在C#中创建托管的线程不一定来自底层操作系统。线程的虚拟化和管理由CLR负责
- Windows运行库
- 从Windows8开始,Windows操作提供了另一种框架:Windows运行库(Windows Runtime)。这个运行库由WUP使用。与.NET Framework不同,这个框架是使用本地代码创建的。当它用于.NET应用程序时,所包含的类型和.NET类似。在语言投射的帮助下,Windows运行库可以用于JavaScript、C++和.NET语言,它看起来编程环境的本地代码。不仅方法因区分大小写而行为不同,方法类型也可以根据所处的位置有不同的名称
- Windows运行库提供了一个对象层次结构,它以在Windows开头的名称空间组织。用于UWP上的应用程序。
- Windows.ApplicationModel:这个名称空间及其子名称空间(如Windows.ApplicationModel.Contracts)定义了类,用于管理应用程序的生命周期、与其他程序通信
- Windows.Data:Windows.Data定义了子名称空间来处理文本、JSON、XML、PDF数据
- Windows.Devices:地理位置、智能卡、服务设备点、打印机、扫描仪等设备可以用Windows.Devices子名称空间访问
四.用.NET Core CLI编译
SDK命令
选项和模板
五.使用VS2017
对应的SDK命令