C# 基础入门
一、语言概述 💻
C#(发音为“C sharp”)是由微软公司设计开发的一种现代、类型安全的面向对象编程语言。它在保持 C++ 语言的表达力和高效性的同时,还提供了自动内存管理、异常处理等现代化特性。
# 符号在音乐记谱法中表示升调(Sharp),当一个音符标记为 # 时,表示这个音要升高半音。这个命名展现了微软对这门语言的野心和定位——既要继承 C 语言家族的优良传统,又要在此基础上有所提升和突破。
C# 作为一种多功能且功能强大的语言,广泛应用于各个领域。特别在游戏编程中非常受欢迎,凭借其强大的性能和灵活性,已成为游戏开发者的首选语言。
本教程将从游戏开发的实际需求出发,聚焦实用语法和技能。
C# 最为人所知的是用于在 Unity 游戏引擎中编写脚本的语言。 Godot 引擎也支持用 C# 编写游戏逻辑。
Unity 通过使用 Mono 实现跨平台 C# 脚本支持。
Godot 3.x 使用 Mono 作为 C# 运行时环境 。Godot 4.x 采用原生 .NET 支持,逐步迁移到了现代 .NET 生态系统。
Mono 是一个开源的 .NET 框架实现,提供跨平台的开发解决方案,为开发者提供完整的 .NET 兼容性环境。
二、语言特性 👥
-
面向对象:
C#支持面向对象编程的原则,使得组织和结构化代码变得更容易。 -
类型安全:
C#是一种静态类型语言,这意味着变量必须声明为特定的数据类型,从而增强代码安全性。 -
内存管理:
C#通过垃圾回收实现自动内存管理,减少内存泄漏的风险。 -
现代语言特性:
C#不断发展,引入了许多现代编程语言的特性,使得开发更加高效和灵活。 -
开源生态系统:
C#拥有活跃的开源社区,提供了大量的开源项目、文档和资源,有助于解决跨平台开发中遇到的问题。
三、开发环境 🖥️
1、.NET SDK 🔧
.NET SDK:该软件开发套件包括编译器、库和其他资源用于用C#开发应用程序。
2、.NET Framework 🔧
.NET Framework 是一个已经存在多年的传统框架,Windows平台专用。
3、.NET Core 🔧
.NET Core 是 .NET 的跨平台开源版本,旨在支持现代应用程序。
4、.NET 🔧
.NET 平台融合了 .NET Framework 和 .NET Core,并为开发人员提供一个单一的平台来创建任何类型的应用程序。这些发展是为了适应现代技术趋势以及提高性能和可扩展性的需求。
5、开发工具 📊
C# 的主要 IDE 是 Microsoft 的 Visual Studio。
不过,还有其他选择,例如 Visual Studio Code(支持 C# 扩展的轻量级代码编辑器)和 JetBrains Rider。
每个环境都有自己的优点和特点,选择取决于开发人员的具体需求:
-
Visual Studio:全面的 IDE,具有适用于大型项目和多语言支持。
-
JetBrains Rider:跨平台 .NET IDE,具有强大的 .NET 开发工具和丰富的插件。
四、Hello World 👋
打开开发工具并创建一个控制台项目或者使用命令行 dotnet new console 创建一个新的控制台应用,dotnet run 编译并运行一个简单的 C# 程序。
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World!");
}
}
C# 程序中的入口点通常由位于 Program 类中的 Main() 方法表示。该方法必须是静态的,并作为程序执行的起点。
void是一个关键字,意味着我们程序的这一部分(称为方法)不会“返回”任何值。
Console.WriteLine() 和 Console.Write() 都将信息打印到控制台。
通用的C#程序结构:
public class Program
{
public static void Main(string[] args)
{
// program code
}
}
args 参数包含一个字符串数组,该数组在程序启动时传递给程序。
五、变量和数据类型 👀
变量用于在程序中存储数据。
1、变量命名规则 📚
变量名称应该是描述性的。
-
变量名称必须以字母或下划线开头。当您想以数字开头变量名(例如
6thEnemy或2DBackground)时,但在C#中是不允许的。相反,请使用enemy6或background2D。 -
在第一个字母或下划线之后,我建议主要使用字母、数字或下划线,除非您有充分的理由使用其他内容。可以使用一些不常见的字符,但其他字符会导致语法错误。
-
变量名中不能使用空格。空格实际上将变量名分成两个变量名,并且会使编译器感到困惑。例如,
playerScore是一个变量,而player Score将被视为两个变量。 -
当变量名包含多个单词时,请使用
驼峰式大小写。
像这样编写多单词变量名称playerfirstName 是可以的,但这些单词往往会混合在一起。为了使名称中的特定单词更清晰,请使用 驼峰式大小写,这意味着第一个单词后面的每个单词都使用大写字母,例如playerFirstName。您可以将第一个字母大写,但根据 C# 约定,变量名称以小写第一个字母开头。
2、基本数据类型 📊
-
整数类型:
int(整型)、long(长整型)、short(短整型)、byte(字节型) -
浮点类型:
float(单精度浮点型)、double(双精度浮点型)、decimal(十进制浮点型) -
字符类型:
char -
布尔类型:
bool -
字符串类型:
string
我们需要指定变量类型的原因之一是让 C# 知道要留出多少内存。
int 存储在 32 位或 4 个字节的内存中。
如果您需要节省内存并且只需要存储小范围内的数字,那么使用 byte 或 short 是正确的选择。
float 是我们存储小数的首选。与 int 一样存储在 32 位或 4 字节内存中。
double 使用 float 所需内存的两倍(因此得名 double),但更精确(更多小数位),而 decimal 是内存大小是 float 的四倍,并提供更高的精度(甚至更多的小数位)!
char 存储在 16 位或 2 个字节的内存中。
bool 存储在 1 位内存中,但在大多数系统中通常分配 1 个字节(8 位)以提高效率。
string 是我们用来存储文本的类型。字符串实际上是由字符组成的,因此它们使用的内存量取决于字符串的长度。
public class Program
{
public static void Main()
{
Console.WriteLine(10);
Console.WriteLine(3.14159);
Console.WriteLine(-0.5f);
Console.WriteLine('Y');
Console.WriteLine(true);
Console.WriteLine("games");
}
}
| 数据类型 | 内存大小 | 说明 |
|---|---|---|
bool | 1 位(通常分配 1 字节) | 存储逻辑值 true 或 false |
byte | 8 位(1 字节) | 存储小范围整数 |
short | 16 位(2 字节) | 存储较小范围的整数 |
int | 32 位(4 字节) | 存储标准整数 |
long | 64 位(8 字节) | 存储非常大的整数 |
char | 16 位(2 字节) | 存储单个字符 |
float | 32 位(4 字节) | 存储单精度浮点数 |
double | 64 位(8 字节) | 存储双精度浮点数,比 float 更精确 |
decimal | 128 位(16 字节) | 存储高精度十进制数 |
string | 可变(取决于长度) | 存储文本,由字符组成 |