2019-1-17 前言 C#高级编程(第11版)
C#已更新为更快的速度。主要版本7.0是
2017年3月发布,次要版本7.1和7.2很快发布
在2017年8月和2017年12月。通过项目设置,您可以
与每个应用程序一起分发,是开源的,不可用
仅适用于Windows的桌面版本,但也适用于许多不同的版本
Windows设备,以及Linux和OS X.
对于创建Web应用程序,ASP.NET Core 1.0是完整的
重写ASP.NET。此版本并非完全落后
与旧版本兼容,需要对现有版本进行一些更改
ASP.NET MVC代码(使用ASP.NET Core MVC)。但是,它也有一个
与旧版本相比有很多优点,比如a
每个网络请求的开销都较低 - 这会带来更好的效果
性能 - 它也可以在Linux上运行。 ASP.NET Web窗体是
不是此版本的一部分,因为ASP.NET Web窗体未设计
为了最好的表现;它是专为开发人员友好而设计的
关于Windows Forms应用程序开发人员已知的模式。
当然,并非所有应用程序都可以轻松更改以便使用
.NET核心。这就是为什么庞大的框架得到改善的原因
即使这些改进没有以尽快的速度完成
作为.NET核心。完整.NET Framework的新版本是4.6。
完整的.NET提供了ASP.NET Web窗体的小更新
堆。
68
注意
模式匹配和元组在第13章中介绍,
“使用C#进行功能编程。”
.NET Core 2.0专注于使现有的更容易
使用.NET Framework编写的应用程序到.NET Core。类型
.NET Core尚未提供但仍在使用的
现在有许多.NET Framework应用程序和库
使用.NET Core。 .NET已添加了20,000多个API
核心2.0。例如,二进制序列化和DataSet又回来了,
你也可以在Linux上使用这些功能。另一个特点就是
帮助将遗留应用程序带入.NET Core是Windows
兼容包(Microsoft.Windows.Compatibility)。这个NuGet
package定义了WCF,注册表访问,加密,目录的API
服务,绘图等。看到
https://github.com/dotnet/designs/blob/master/accepted/compatpack/
compat-pack.md表示当前状态。
.NET标准是一个定义应该是哪些API的规范
可在任何支持该标准的平台上使用。越高了
标准版本,可用的API越多。 .NET Standard 2.0
将标准扩展了20,000多个API,并得到了支持
.NET Framework 4.6.1,.NET Core 2.0和通用Windows
平台(Windows应用程序)以build 16299开头(Fall Creators
更新Windows 10)。
注意
选择要使用的编译器版本。
C#7引入了许多新功能(这些功能在本文中列出
简介。)这些功能中最重要的来自
函数式编程:模式匹配和元组。
69
.NET标准将在第19章“库”中详细介绍
程序集,软件包和NuGet。“
要检查您的应用程序是否可以轻松移植到.NET Core,
您可以使用.NET可移植性分析器。您可以安装此工具
Visual Studio的扩展。它分析你的二进制文件。您可以
配置哪些版本的可移植性信息
您想要获得的框架,您可以选择可移植性
有关.NET Core,.NET Framework,.NET Standard,Mono的信息,
Silverlight,Windows,Xamarin等。结果可以是JSON,
HTML和Excel。
图1-1显示了选择.NET后的摘要报告
与.NET Framework 100%兼容的框架二进制文件,
.NET Core为96.67%,Windows应用程序为69.7%。图1-
图2显示了有问题的API的详细信息。
选择技术并继续前进
当你知道竞争技术的原因时
框架,选择用于编程的技术更容易
应用。 例如,如果您正在创建新的Windows
在Windows Forms上下注并不是一个好主意。 代替,
您应该使用基于XAML的技术,例如Universal
Windows平台(UWP)。 当然,还有很好的理由
使用其他技术。 您需要支持Windows 7客户端吗? 在
在这种情况下,UWP不是一个选项,但WPF是。 你仍然可以创建你的
WPF应用程序的方式可以轻松切换到其他应用程序
技术,如UWP和Xamarin。
如果您正在创建Web应用程序,可以安全地使用ASP.NET Core
使用ASP.NET Core MVC。使用ASP.NET排除此选择
Web表单。如果您正在访问数据库,则应使用实体
Framework Core,您应该选择Managed Extensibility
框架而不是System.AddIn。
旧版应用程序仍使用Windows窗体和ASP.NET Web
表格和其他一些旧技术。它没有意义
改变现有应用程序只是为了使用新技术。必有
做出改变是一个巨大的优势 - 例如,什么时候
维护代码已经是一场噩梦和大量的重构
需要更改为更快的发布周期
客户,或使用新技术时允许减少
编码更新时间。根据遗留应用程序的类型,
切换到新技术可能不值得。您可以
允许应用程序仍然基于旧技术,因为
仍然支持Windows窗体和ASP.NET Web窗体
选择技术并继续前进
当你知道竞争技术的原因时
框架,选择用于编程的技术更容易
应用。例如,如果您正在创建新的Windows
在Windows Forms上下注并不是一个好主意。代替,
您应该使用基于XAML的技术,例如Universal
Windows平台(UWP)。当然,还有很好的理由
使用其他技术。您需要支持Windows 7客户端吗?在
在这种情况下,UWP不是一个选项,但WPF是。你仍然可以创建你的
WPF应用程序的方式可以轻松切换到其他应用程序
技术,如UWP和Xamarin。
71
未来很多年。
本书的内容基于较新的技术展示
什么是创建新应用程序的最佳选择。如果你仍然需要
维护旧版应用程序,您可以参考旧版本
本书,涵盖ASP.NET Web窗体,WCF,Windows窗体,
System.AddIn,Workflow Foundation和其他传统技术
它仍然是.NET Framework的一部分,可用于.NET Framework。
.NET术语
目前的.NET技术是什么? 图1-3给出了总体情况
.NET Framework,.NET Core和Mono如何关联的图片
彼此。 所有.NET Framework应用程序,.NET Core应用程序和Xamarin
如果应用程序是使用.NET构建的,则可以使用相同的库
标准。 这些技术共享相同的编译器平台,
编程语言和运行时组件。 他们不分享
相同的运行时,但它们确实在运行时共享组件。
例如,实时使用(JIT)编译器RyuJIT
.NET Framework和.NET Core。
使用.NET Framework,您可以创建Windows窗体,WPF和
在Windows上运行的旧版ASP.NET应用程序。
使用.NET Core,您可以创建ASP.NET Core和控制台应用程序
在不同的平台上运行。 Universal也使用.NET Core
Windows平台(UWP),但这不会使UWP可用
Linux操作系统。 UWP还使用了Windows运行时,即
仅适用于Windows。
Xamarin提供Xamarin.IoS和Xamarin.Android,库
使您能够为iPhone和Android开发C#应用程序。同
Xamarin.Forms,你有一个库来共享它们之间的用户界面
两个移动平台。 Xamarin目前仍以此为基础
Mono框架,由Xamarin开发的.NET变体。在某些
一点,这可能会改为.NET Core。但是,重要的是
所有这些技术都可以使用为其创建的相同库
.NET标准。
在图1-3的下半部分,您可以看到还有一些共享
在.NET Framework,.NET Core和Mono之间进行。运行
组件,例如垃圾收集器和RyuJIT的代码
(这是一个新的JIT编译器,用于将IL代码编译为本机代码)
共享。垃圾收集器由CLR,CoreCLR和.NET使用
本土。 CLR和使用RyuJIT即时编译器
CoreCLR。 .NET编译器平台(也称为Roslyn)和
所有这些平台都使用编程语言。
.NET Framework
.NET Framework 4.7已经是.NET Framework
在过去的15年中不断增强。 许多技术
在历史部分讨论过的是基于此
框架。 此框架用于创建Windows窗体和
WPF应用程序。 .NET Framework 4.7仍然提供增强功能
Windows窗体,例如支持高DPI。
如果要继续使用ASP.NET Web窗体,ASP.NET
4.7使用.NET Framework 4.7是可行的方法。 否则,你需要
注意
为了使用.NET Core开发应用程序,Microsoft创建了新的
名为.NET Core Command line(CLI)的命令行实用程序。
重写一些代码以转移到.NET Core。 视质量而定
源代码和需要添加新功能,重写代码
可能是值得的。
.NETCore
.NET Core是所有新技术和新技术使用的新.NET
在本书中有一个重点。这个框架是开源的 - 你可以
在http://www.github.com/dotnet上找到它。运行时是CoreCLR
库;框架包含集合类,文件系统
访问,控制台,XML以及更多内容位于CoreFX存储库中。
与.NET Framework不同,它是您需要的特定版本
必须使用.NET Core 1.0在系统上安装该应用程序
包含运行时的框架随之提供
应用。以前有时候你可能有过
将ASP.NET Web应用程序部署到共享服务器的问题
因为提供程序安装了旧版本的.NET;那些时候
消失了。现在,您可以使用应用程序提供运行时
不依赖于服务器上安装的版本。
.NET Core采用模块化方法设计。框架分裂
到大量的NuGet包列表。这样你就不必处理了
使用所有包,使用元数据包引用
较小的包一起工作。 Metapackages甚至有所改善
使用.NET Core 2.0和ASP.NET Core 2.0。使用ASP.NET Core 2.0,
你只需要引用Microsoft.AspNetCore.All来获取所有内容
ASP.NET Core Web应用程序通常需要的包。
.NET Core可以快速更新。甚至更新运行时
不影响现有的应用程序,因为运行时可以
与应用程序一起安装。现在微软可以改进.NET Core,
包括运行时,更快的发布周期。
请阅读第19章中有关.NET标准的详细信息。
NuGet包
在早期,组件是具有应用程序的可重用单元。
当使用时,这种使用仍然是可能的(并且对某些组件是必要的)
您正在添加对程序集的引用以使用公共类型和
你自己的代码中的方法。但是,使用库可能意味着很多
不只是添加引用并使用它。使用库也可以
表示某些配置更改或可用于执行的脚本
一些功能的优点。这是打包的原因之一
NuGet包中的程序集。
NuGet包是一个包含程序集(或多个)的zip文件
程序集)以及配置信息和PowerShell
脚本。
使用NuGet包的另一个原因是可以找到它们
容易;它们不仅可以从微软获得,也可以从第三方获得
派对。可以在NuGet服务器上轻松访问NuGet包
http://www.nuget.org。
从Visual Studio项目中的引用,您可以打开
NuGet包管理器(参见图1-4)。在那里你可以搜索
打包并将它们添加到应用程序中。这个工具使您能够
搜索尚未发布的包(包括预发布
选项)并定义包应该在的NuGet服务器
搜索。搜索包的一个地方是您自己的共享
放置内部使用的包的目录。
注意
当您使用NuGet服务器中的第三方软件包时,您就是
如果包裹以后可用,则始终存在风险。 你还需要
检查包的支持可用性。 经常检查
用于项目链接以及使用前有关包的信息
它。 使用包源,您可以选择Microsoft和.NET
只获得Microsoft支持的软件包。 第三方包
也包括在Microsoft和.NET部分中,但它们都是
Microsoft支持的第三方软件包。
注意
有关NuGet包管理器的更多信息,请参阅
在第17章“Visual Studio 2015”中。
命名空间
.NET提供的类组织在名称空间中
名称以系统开头。 为了让您了解层次结构,
下表描述了一些命名空间。
System.Collections |
这是集合的根命名空间。 |
System.Data |
这是访问数据库的命名空间。 |
System.Diagnostics |
这是诊断的根命名空间 |
System.Globalization |
这是包含类的命名空间 |
System.IO |
这是File IO的命名空间,它们是 |
System.Net |
这是核心网络的命名空间, |
System.Threading |
这是线程和的根命名空间 |
注意
许多新的.NET类使用以。开头的命名空间
将Microsoft命名为System而不是System
实体框架核心的Microsoft.EntityFrameworkCore
和新的Microsoft.Extensions.DependencyInjection
依赖注入框架。
Common Language Runtime
公共语言运行时
通用Windows平台使用Native .NET进行编译
使用AOT编译器将IL转换为本机代码。这就像Xamarin.iOS。
对于所有其他方案,两个应用程序都使用.NET
使用.NET Core 1.0的框架和应用程序,一个Common
需要语言运行时(CLR)。 .NET Core使用CoreCLR
而.NET Framework使用CLR。所以,做了什么
CLR?
在CLR执行应用程序之前,任何源代码
你需要编译(用C#或其他语言编写)。
编译在.NET中分两步进行:
1.源代码汇编到Microsoft中间语言
(IL)
2. CLR将IL编译为特定于平台的本机代码
IL代码在.NET程序集中可用。在运行时,a
Just-In-Time(JIT)编译器编译IL代码并创建
特定于平台的本机代码。
新的CLR和CoreCLR包含名为的JIT编译器
RyuJIT。新的JIT编译器不仅比以前更快
一;它还可以更好地支持编辑和继续功能
使用Visual Studio进行调试。 “编辑并继续”功能启用
您可以在调试时编辑代码,然后继续调试
会话无需停止并重新启动进程。
运行时还包括一个带有类型加载器的类型系统
负责从程序集加载类型。安全架构
用类型系统验证某些类型的系统结构
是允许的 - 例如,继承。
创建类型实例后,实例也需要
破坏和记忆需要回收。另一个特点
runtime是垃圾收集器。垃圾收集器清理干净
来自托管堆的内存不再被引用。
运行时还负责线程化。创建托管
来自C#的线程不一定是来自底层的线程
操作系统。线程由虚拟化和管理
运行。
注意
如何从C#创建和管理线程
第21章,“任务和并行编程”,以及第1章
22,“任务同步。”第17章,“管理和
非托管内存,“提供有关垃圾的信息
收集器以及如何清理内存。
Windows运行时
从Windows 8开始,Windows操作系统提供
另一个框架:Windows运行时。此运行时使用
Windows Universal Platform和Windows 8的版本1,
Windows 8.1版本2和Windows 10版本3。
与.NET Framework不同,此框架是使用本机创建的
码。当它与.NET应用程序一起使用时,包含的类型和方法
看起来像.NET。借助语言投影,Windows
运行时可以与JavaScript,C ++和.NET语言一起使用,
看起来它是编程环境的原生。方法
在案例敏感性方面不仅表现不同;该
方法和类型也可以根据具体位置而有不同的名称
他们被使用。
Windows运行时提供了一个组织的对象层次结构
以Windows开头的命名空间。看看这些课程,有
.NET类型的重复功能并不是很多;相反,额外的
提供的功能可用于在其上运行的应用程序
通用Windows平台。
NAMESPACE DESCRIPTION
Windows.ApplicationModel This namespace and its subnamespaces,
such as
Windows.ApplicationModel.Contracts,
define classes to manage the app lifecycle
and communication with other apps.
80
Windows.Data Windows.Data defines subnamespaces to
work with Text, JSON, PDF, and XML
data.
Windows.Devices Geolocation, smartcards, point of service
devices, printers, scanners, and other
devices can be accessed with
subnamespaces of Windows.Devices.
Windows.Foundation Windows.Foundation defines core
functionality. Interfaces for collections are
defined with the namespace
Windows.Foundation.Collections. You will
not find concrete collection classes here.
Instead, interfaces of .NET collection types
map to the Windows Runtime types.
Windows.Media Windows.Media is the root namespace for
playing and capturing video and audio,
accessing playlists, and doing speech
output.
Windows.Networking This is the root namespace for socket
programming, background transfer of
data, and push notifications.
Windows.Security Classes from
Windows.Security.Credentials offer a safe
store for passwords;
Windows.Security.Credentials.UI offers a
picker to get credentials from the user.
Windows.Services.Maps This namespace contains classes for
location services and routing.
Windows.Storage With Windows.Storage and its
subnamespaces, it is possible to access
files and directories as well as use streams
and compression.
Windows.System The Windows.System namespace and its
subnamespaces give information about the
system and the user, but they also offer a
81
Launcher to launch other apps.
Windows.UI.Xaml In this namespace, you can find a ton of
types for the user interface.
设置环境
如果您安装了安装了最新更新的Visual Studio 2017,
您可以立即从CLI工具开始。如从前那样
提到,您可以在没有Visual Studio 2017的情况下设置系统。您
也可以在Linux和OS X上使用大部分样本。要下载
应用程序适用于您的环境,只需访问https://dot.net和
单击“开始”按钮。从那里,您可以下载.NET
适用于Windows,Linux和macOS的SDK。
对于Windows,您可以下载安装SDK的可执行文件。
使用Linux,您需要选择Linux发行版才能获得
相应的命令:
使用Red Hat和CentOS,使用yum安装.NET SDK。
使用Ubuntu和Debian,使用apt-get。
使用Fedora,使用dnf install。
使用SLES / openSUSE,使用zipper安装。
要在Mac上安装.NET SDK,您可以下载.pkg文件。
使用Windows,不同版本的.NET Core运行时以及
NuGet包安装在用户配置文件中。在你工作的时候
在.NET中,此文件夹的大小会增加。随着时间的推移,您创建多个
项目,NuGet包不再存储在项目本身;
它们存储在此特定于用户的文件夹中。这具有以下优点:
你不需要为每个不同的下载NuGet包
项目。 下载了这个NuGet软件包后,它就在您的软件包上
系统。 就像不同版本的NuGet包以及
运行时可用,所有不同的版本都存储在此中
夹。 有时检查此文件夹可能会很有趣
并删除不再需要的旧版本。
安装.NET Core CLI工具,您可以使用dotnet工具作为条目
指出要启动所有这些工具。 刚开始
> dotnet --help
查看可用的dotnet工具的所有不同选项。 很多
选项有简写符号。 如需帮助,您可以输入
> dotnet --h
创建应用程序
dotnet工具提供了一种创建“Hello World!”的简便方法。
应用。 只需输入以下命令:
> dotnet新控制台 - 输出HelloWorld
此命令创建一个新的HelloWorld目录并添加源
代码文件Program.cs和项目文件HelloWorld.csproj。 开始
使用.NET Core 2.0,此命令还包括一个dotnet还原
下载所有NuGet包的地方。 要查看列表
您可以使用应用程序使用的依赖项和库版本
检查obj子目录中的文件project.assets.json。没有
使用选项--output(或-o作为速记),文件将是
在当前目录中生成。
生成的源代码类似于以下代码段(代码
文件HelloWorld / Program.cs):
using System;
namespace HelloWorld
{
class Program
{static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
自20世纪70年代以来,Brian Kernighan和Dennis Ritchie撰写了这篇文章
预订C编程语言,这是一个传统
使用“Hello World!”应用程序学习编程语言。
使用.NET Core CLI,将自动生成此程序。
让我们进入这个程序的语法。 Main方法是条目
指向.NET应用程序。 CLR调用静态Main方法
启动。 Main方法需要放入一个类中。这里,班级是
命名程序,但您可以通过任何名称来调用它。
Console.WriteLine调用Console类的WriteLine方法。
您可以在System命名空间中找到Console类。你没有
需要编写System.Console.WriteLine来调用此方法;该
打开系统命名空间,使用上面的using声明
源文件。
编写源代码后,需要编译代码才能运行它。
创建的项目配置文件名为HelloWorld.csproj。
与旧的csproj文件相比,新的项目文件减少了一些
具有多个默认值的行:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
</Project>
使用项目文件,OutputType定义输出的类型。
使用控制台应用程序,这是Exe。 TargetFramework指定
框架和用于构建应用程序的版本。
使用示例项目,应用程序使用.NET Core 2.0构建。
您可以将此元素更改为TargetFrameworks并指定多个元素
框架,例如netcoreapp2.0; net47,用于构建应用程序
for .NET Framework 4.7和.NET Core 2.0(项目文件
84
的HelloWorld/ HelloWorld.csproj):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp2.0;net47</TargetFrameworks>
</PropertyGroup>
</Project>
Sdk属性指定项目使用的SDK。
Microsoft提供了两个主要的SDK:用于控制台的Microsoft.NET.Sdk
用于ASP.NET Core Web的应用程序和Microsoft.NET.Sdk.Web
应用。
您不需要将源文件添加到项目中。 带有.cs的文件
同一目录和子目录中的扩展名是自动的
添加了编译。 扩展名为.resx的资源文件是
自动添加以嵌入资源。 你可以改变
默认行为和显式排除/包含文件。
您也不需要添加.NET Core包。 通过指定
目标框架netcoreapp2.0,元数据包
引用许多其他包的Microsoft.NetCore.App是
自动包含。
构建应用程序
要构建应用程序,需要将当前目录更改为
应用程序的目录并启动dotnet构建。 当你
编译.NET Core 2.0和.NET Framework 4.7,你会看到输出
如下:
> dotnet build
Microsoft (R) Build Engine version 15.5.179.9764 for .NET
Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 19.8 ms for
C:\procsharp\Intro\HelloWorld\HelloWorld.csproj.
HelloWorld ->
C:\procsharp\Intro\HelloWorld\bin\Debug\net47\HelloWorld.exe
HelloWorld ->
85
C:\procsharp\Intro\HelloWorld\bin\Debug\netcoreapp2.0\HelloWorld.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.58
注意
命令dotnet new和dotnet build现在包括
恢复NuGet包。 您还可以显式恢复NuGet
使用dotnet还原的软件包。
由于编译过程,您会发现包含的程序集
程序类的IL代码
bin / debug / [netcoreapp2.0 | net47]文件夹。 如果你比较的构建
使用.NET 4.7的.NET Core,您将找到包含IL代码的DLL
使用.NET Core,以及包含.NET 4.7的IL代码的EXE。
为.NET Core生成的程序集依赖于
System.Console程序集,而.NET 4.6程序集找到
mscorlib程序集中的控制台类。
要构建发布代码,您需要指定选项--Configuration
发布(简写-c发布):
> dotnet build --configuration Release
以下章节中的一些代码示例可以使用
C#7.1或C#7.2提供的功能。 默认情况下,最新的主要
使用编译器的版本,即C#7.0。 要启用更新
在C#的版本中,您需要在项目文件中指定它,如图所示
使用以下项目文件部分。 在这里,最新版本
配置了C#编译器。
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
运行应用程序
要运行该应用程序,可以使用dotnet run命令
> dotnet run
如果项目文件针对多个框架,您需要告诉
dotnet run命令用于运行应用程序的框架
使用选项--framework。 必须配置此框架
csproj文件。 使用示例应用程序,您可以看到类似的输出
恢复信息后的以下内容:
> dotnet run ––framework netcooreapp2.0
Microsoft (R) Build Engine version 15.5.179.9764 for .NET
Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 20.65 ms for
C:\procsharp\Intro\HelloWorld\HelloWorld.csproj.
Hello World!
在生产系统上,您不使用dotnet run来运行
应用。 相反,您使用dotnet与库的名称:
> dotnet bin/debug/netcoreapp2.0/HelloWorld.dll
您还可以创建可执行文件,但可执行文件是平台
具体。 如何完成此操作将在本章的后面部分中显示
“打包和发布应用程序。”
注意
正如您所见,构建并运行“Hello World!”应用程序
Windows,dotnet工具在Linux和OS X上的工作方式相同。你
可以在任一平台上使用相同的dotnet命令。
正如Visual Studio 2017所提供的,本书的重点是Windows
一个比可用的更强大的开发平台
其他平台,但本书中的许多代码示例都是基于的
在.NET Core上,您将能够在其他平台上运行它们
运行应用程序
要运行该应用程序,可以使用dotnet run命令
同样。 您还可以使用Visual Studio Code,这是一个免费的开发
环境,直接在Linux和OS X上开发应用程序。
有关详细信息,请参阅本章后面的“开发人员工具”部分
有关Visual Studio的不同版本的信息。
正如您所见,构建并运行“Hello World!”应用程序
Windows,dotnet工具在Linux和OS X上的工作方式相同。你
可以在任一平台上使用相同的dotnet命令。
正如Visual Studio 2017所提供的,本书的重点是Windows
一个比可用的更强大的开发平台
其他平台,但本书中的许多代码示例都是基于的
在.NET Core上,您将能够在其他平台上运行它们
运行应用程序
要运行该应用程序,可以使用dotnet run命令
同样。 您还可以使用Visual Studio Code,这是一个免费的开发
环境,直接在Linux和OS X上开发应用程序。
有关详细信息,请参阅本章后面的“开发人员工具”部分
有关Visual Studio的不同版本的信息。
2019-1-17 前言 C#高级编程(第11版)的更多相关文章
- C#高级编程第11版 - 第八章 索引
[1]8.1 引用方法 1.委托是指向方法的.NET地址变量. 2.委托是类型安全的类,定义了返回类型和参数类型.委托类不单单只包含一个方法引用,它也可以保存多个方法的引用. 3.Lambda表达式直 ...
- C#高级编程第11版 - 第六章 索引
[1]6.2 运算符 1.&符在C#里是逻辑与运算.管道符号|在C#里则是逻辑或运算.%运算符用来返回除法运算的余数,因此当x=7时,x%5的值将是2. [2]6.2.1 运算符的简写 1.下 ...
- C#高级编程第11版 - 第五章 索引
[1]5.1 泛型概述 1.通过泛型,你可以创建独立于特定类型(contained types)以外的方法和类,而不用为不同类型编写多份同样功能的代码,你只需要创建一个方法或者类. 2.泛型类使用泛型 ...
- C#高级编程第11版 - 第三章 索引
[1]3.1 创建及使用类 1.构造函数:构造函数的名字与类名相同: 使用 new 表达式创建类的对象或者结构(例如int)时,会调用其构造函数.并且通常初始化新对象的数据成员. 除非类是静态的,否则 ...
- C#高级编程第11版 - 第九章 索引
[1]9.1 System.String 类 String类中关键的方法.如替换,比较等. [2]9.1.1 构建字符串 1.String类依然有一个缺点:因为它是不可变的数据类型,这意味当你初始化一 ...
- C#高级编程第11版 - 第七章 索引
[1]7.1 相同类型的多个对象 1.假如你需要处理同一类型的多个对象,你可以使用集合或者数组. 2.如果你想使用不同类型的不同对象,你最好将它们组合成class.struct或者元组. [2]7.2 ...
- C#高级编程第11版 - 第四章 索引
[1]4.2 继承的类型 1.C#不支持类的多继承,但它支持一个接口继承自多个接口. 2.单继承:单继承允许一个类继承自另外一个基类,C#支持. 3.多级继承:多级继承允许创建一个类继承自它的父类,而 ...
- C#高级编程第11版 - 第二章 索引
[1]2.1.1 Hello,World! 1. using static System.Console; // ... WriteLine("Hello World!"); 提前 ...
- ASP.NET MVC 4高级编程(第4版)
<ASP.NET MVC 4高级编程(第4版)> 基本信息 作者: (美)Jon Galloway Phil Haack Brad Wilson K. Scott All ...
随机推荐
- 有源点最短路径--Dijkstra算法
问题描述:一个带权有向图G与源点v,求从源点v到G中其他顶点的最短路径,并限定各边权值大于0 它的思想在于,对顶点集划分为两组,第一组为已经求出的最短路径的集合(S),期初只有一个顶点,此后每求出一个 ...
- 全新定义!免费开源ERP平台如何玩转工业互联网
简述 IoT Box通过Wifi.蓝牙.USB.网线等方式连接设备.IoT再通过互联网连接到Odoo服务器 Odoo的各种应用通过IoT操作各种设备.例如,PoS应用通过IoT操作小票打印机.银行刷卡 ...
- Android WebView 缓存
android很多情况是使用webView用来显示界面,但是webview的加载速度略慢,想让这个webview更快一些所以需要使用缓存,在没有更新的时候使用缓存技术来提高速度.总体来讲有两个方案可以 ...
- iTop软件功能分析以及优缺点比较
iTop软件功能分析以及优缺点比较 iTop对标文档 1. 概述 2. CMDB 3. 主要功能模块 3.1 配置管理(Configuration Managment) 3.2 用户请求管理(Help ...
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- C# 三种打印方式含代码
一:C#代码直接打印pdf文件(打印质保书pdf文件) 引用: 代码注释很详细了. private void btn_pdf_Click(object sender, RoutedEventArgs ...
- vs 2017
Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH
- ubuntu-18.04 设置开机启动脚本-亲测有效
ubuntu-18.04不能像ubuntu14一样通过编辑rc.local来设置开机启动脚本,通过下列简单设置后,可以使rc.local重新发挥作用. 2.将下列内容复制进rc-local.servi ...
- [Vue] karme/jasmine/webpack/vue搭建测试环境
karma 和 jasmine karma 是 google 开源的一个基于 Node.js 的 JavaScript 前端测试运行框架,前身叫 Testacular. jasmine 是一个 jav ...
- 机器学习——logistic回归,鸢尾花数据集预测,数据可视化
0.鸢尾花数据集 鸢尾花数据集作为入门经典数据集.Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数 ...