C# 编程是基于 C 和 C++ 的由微软开发的面向对象的编程语言。它基于 .Net framework
、.Net Core
(跨平台)开发,用于编写 .Net 应用程序的语言。使用的集成开发环境(IDE)是微软的Visual Studio.
1. C# 程序结构
- C# 工程文件的后缀名为
.sln
- C# 的代码文件的后缀为
.CS
;
程序 = 数据 + 算法;
1.1 解决方案Solusion 与项目Porject 的关系
解决方案可包含多个项目,是某个需求的总的解决方案,而项目是某个具体问题的解决方法;
一个项目可以被多个解决方案使用,又叫项目的重用;
- 在解决方案中添加项目:右击解决方案资源管理器中的解决方案 - 添加 - 添加一个新项目或现有项目
1.2 命名空间namespace 与类class 的关系
- 命名空间namespace:以树形结构组织类,即命名空间(图书馆)可以包含多个类(某一本书),同一个命名空间内不可以包含同名的类,但不同的命名空间内可以包含同名的类;
- 类class:构成程序的主体,包含在命名空间中;
# 错误代码
namespace MyNamespace
{
public class MyClass
{
// ... 类的实现 ...
}
public class MyClass // 错误:同名的类
{
// ... 另一个类的实现 ...
}
}
# 正确代码
namespace NamespaceA
{
public class MyClass
{
// ... 类的实现 ...
}
}
namespace NamespaceB
{
public class MyClass // 可以的,因为是在不同的命名空间中
{
// ... 另一个类的实现 ...
}
}
- 命名空间与类的关系:以
Console.WriteLine();
方法为例,其调用顺序依次为:命名空间System
- 类Console
- 方法WriteLine();
,所以要使用Console.WriteLine();
方法,就必须先引用命名空间using System;
;
1.3 类库
类库是一个具体封装文件(后缀.dll
),其包含了一个或多个命名空间,下文中“1.4.4.5 通过官方文档定位类、命名空间” 讲到要使用Console.WriteLine
方法,除了必须引用指定命名空间,还必须包含相应类库;
可以在“框架”中发现,该类库已被包含;
-
类库的引用:
- 黑盒引用:引用官方已经写好的类库,看不到源代码,如NuGet 包、官方类库;
- 白盒引用:引用第三方写好的的类库,可看到源代码;
-
类库的新建与编写:新建项目 - 选择要创建的类库,类库的编译结果是生成一个
.dll
文件;
1.3.1 例程:在同一个解决方案中同时创建项目和类库,并把类库引用在项目中使用
这是一个白盒引用
- 创建一个解决方案;
- 创建一个WPF 应用程序;
- 创建一个WPF 类库;如下图:
- 修改WPF 类库中类C#文件名为Cal,并编写代码如下:
using System;
namespace WpfLibrary1
{
public class Cal // 在修改C#文件名的同时,系统会自动同步代码中的类名
{
public static double Add(double a, double b)
{
return a + b;
}
public static double Sub(double a, double b)
{
return a - b;
}
}
}
- 右击WPF 应用程序的依赖项,添加项目引用 - 在“项目”中找到项目类库并勾选引用,此时WPF 引用程序中有相应的显示;
- 在WPF 应用程序中编写以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WpfLibrary1; // using 引入的WPF 项目库
namespace WPF_HelloWord
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button_ShowHelloWord_Click(object sender, RoutedEventArgs e)
{
double result = Cal.Add(1,2); // 成功引用WPF 项目库中的方法
string numberAsString = result.ToString();
textBox_ShowHelloWord.Text = numberAsString;
}
}
}
1.4 UML(通用建模语言)类图
如下图即是一个UML 类图:
一个program 类内的Main() 方法调用Console 类中的WriteLine()方法;
1.5 对象浏览器
以上文“1.2.2 类库”为例,寻找System.Console
的关系,依次点击菜单栏视图 - 对象浏览器:
1.6 引用管理器
右击依赖项 - 添加项目引用,即可打开引用管理器;
- 添加第三方类库:在引用管理器中选择浏览 - 浏览,选择要引用的第三方类库;
1.7 NuGet 管理器
NuGet 包的引用属于黑盒引用;
- NuGet 管理器打开:菜单栏 - 工具 - Nuget 包管理器 - 管理解决方案的Nuget 程序包;
- NuGet 管理器:NuGet 是一个开源的软件包管理系统,在Visual Studio 2022中,NuGet 作为Visual Studio 的一个扩展,能够简化在Visual Studio项目中添加、更新和删除库;
- NuGet 包:NuGet包是打包成单个ZIP文件的集合,文件扩展名是
.nupkg
;包含了编译好的代码(Dll)、与该代码相关的其他文件,以及一个描述性清单(包含包版本号等信息)。 - 添加NuGet包:
安装完NuGet 包后,解决方案管理器中即有NuGet 包的显示,NuGet 包内部包含的命名空间、类、方法,都可在对象管理器中查看;
2. 开发IDE - Visual Studio
这里使用的Visual Studio 版本为2022;
- WinForms 和WPF 的区别:WPF 要比前者新,最终都是用于开发窗口应用;
.net framworks
和.net core
的区别:.net framworks
和.net core
是两个不同的开发框架,其区别主要如下:
.NET Framework 和 .NET Core 是两个不同的开发框架,它们之间存在一些主要的区别。以下是它们之间的一些主要差异:
1. **跨平台支持**:
- **.NET Framework** 仅限于 Windows 操作系统,并且不支持其他操作系统如 Linux 或 macOS。
- **.NET Core** 是跨平台的,它可以在 Windows、Linux 和 macOS 等多个操作系统上运行。
2. **开源性**:
- **.NET Framework** 是一个私有的商业软件,其源代码并不开源。
- **.NET Core** 是一个开源项目,其源代码在 GitHub 上公开,并且遵循开源协议。这意味着任何个人或企业都可以基于 .NET Core 创建和发布产品,而无需向微软付费。
3. **版本更新和支持**:
- **.NET Framework** 的最新版本是 4.8,并且微软已宣布未来不再计划推出新的版本。这意味着新的功能和改进将不会添加到这个框架中。
- **.NET Core** 是一个持续发展和改进的项目。随着版本的迭代,新的功能和性能优化会被不断加入到这个框架中。
4. **应用类型支持**:
- **.NET Framework** 支持 Windows 桌面应用程序、Web 应用程序和服务端应用程序。
- **.NET Core** 除了支持 Windows 平台,还支持 macOS 和 Linux 等其他操作系统上的应用程序开发。
5. **性能和优化**:
- **.NET Core** 在性能上进行了优化,并通过各种测试证明了其性能的提升。
6. **社区和生态系统**:
- 由于 .NET Core 的开源性质,它拥有庞大的社区支持和活跃的开发者生态系统,这使得在遇到问题时更容易找到解决方案和支持。
7. **迁移和兼容性**:
- 如果开发者有现有的 .NET Framework 应用程序,迁移到 .NET Core 可能需要一些工作,因为尽管两者都是 .NET 家族的一部分,但它们在内部实现和 API 上存在一些差异。
2.1 开发环境配置
- 到官网安装Visual Studio Community. 安装后立马登录,否则免费期限只有30天,登录可长期免费。
若登录出现网络问题,可尝试在账户选项中选择系统Web浏览器登录。
- 选择安装对应的工作负载,一直到安装结束;
2.2 调试Debug
2.2.1 断点
- 设置断点 - 运行代码 - 单步调试
2.2.2 调用栈(Call Stack)
代码调试时,在Call Stack 窗口,可查看到从调试点处,方法逐步调用的追踪,双击即可进入查看对应方法;
2.2.3 局部变量变化观察(Local)
当代码调试到某个方法内部时,Locals 窗口可查看该方法内部的局部变量的值与类型;
2.3 高效性
2.3.1 常用快捷键与代码快速插入
常用快捷键:
- 注释:Ctrl + K + C ,取消注释:Ctrl + K +U
- 快速搜索:Ctrl + Q
- 全部保持:Ctrl + Shift + S
- 开始调试:F5
- 智能标记:Ctrl + .
- 快速选择提示词:当提示词出现时,连续按两下Tab
代码快速插入:输入代码代号,然后连续按两下Tab
cw
:System.Console.WriteLine();
fore
:
foreach (var item in collection)
{
}
for
:
for (int i = 0; i < length; i++)
{
}
if
、else if
、else
:
if (true)
{
}
- 构造函数:
ctor
- get、set 访问器:
propfull
private int myVar;
public int MyProperty
{
get { return myVar; }
set { myVar = value; }
}
2.3.2 波浪线与智能标记
波浪线可以在键入时对代码中的错误或潜在问题发出警报。将鼠标悬停在波浪线上,将看到关于此错误的更多信息和解决方案。智能标记的快捷键是Ctrl + .
2.3.3 重构
重构包括智能重命名变量、将一个或多个代码行提取到新方法中和更改方法参数的顺序;
2.3.3.1 封装字段
右击定义的字段 - 重构 - 封装字段:
2.3.4 查看方法、类的关系
在自动填充中点击某个内容,即可查看其定义关系与简介;
如下Console 类来自于System 命名空间;
2.3.5 通过官方文档定位类、命名空间
- Visual Studio 菜单栏“帮助” - “查看帮助” - 跳转到官方页面 https://learn.microsoft.com/zh-cn/;
- 页面右上角搜索目标内容,如
console.writeline
;
另外还可以在IDE 中的选中任意类,点击键盘F1来快速去到该类的帮助页面:
2.3.6 命名空间、类、方法、事件等在Visual Studio 中的符号标记
- 命名空间:
- 类
- 方法:
- 事件:
2.3.7 快速规范化代码
想要整页代码快速规范化,点击菜单栏编辑 - 高级 - 设置文档的格式(快捷键Ctrl+K+D)
2.5 解决方案资源管理器(项目浏览器 - Solution Explorer)
在Visual Studio 的右边,有一个“解决方案资源管理器”,可以查看和管理代码文件;
3. C#代码规范
- 函数注释规范:
/// <function>
/// 函数名称 : Form1_Load
/// 功能描述 : 窗口Form1加载函数
/// 输入变量 : **
/// 返 回 值 : 无
/// 最后修改人 : xxx
/// 最新更新日期: 20210109
/// 说 明 : 在运行窗体时运行
/// </function>
4. 其他
4.1 Visual Studio 中生成"发布"版本
- 在Visual Studio 中训着Release,点启动;
- 在工程目录中找到
obj
文件夹 - x86 - Release - 即可找到发布版本;
4.4 C# 和.Net Framework 的关系
.Net Framework 是一个平台,它提供了一个跨语言的统一编程环境。而 C# 是一种在 .Net Framework 平台上使用的编程语言。目前能在 .Net Framework 平台上使用的开发语言有很多,例如 Visual Basic .NET、Python、J#、Visual C++.NET 等等,但使用最多的还是 C#;