C# 基础
上次修改时间:2024 年 1 月 17 日
在本文中,我们将介绍 C# 语言的基本编程概念。我们将介绍一些非常基础的程序。我们将使用变量、常量和基本数据类型。我们将读取和写入控制台;我们将提及变量插值。
C# 老式示例
我们从一个传统的 C# 示例开始。
using System; namespace Simple { class Program { static void Main(string[] args) { Console.WriteLine("This is C#"); } } }
该程序将“This is C#”消息打印到控制台。我们逐行解释。
using System;
using
关键字将特定的命名空间导入到我们的程序中。创建命名空间是为了对命名实体进行分组和/或区分与其他命名实体。这可以防止名称冲突。这一行是 C# 语句。每个语句都以分号结尾。
namespace Simple {
我们声明一个命名空间。命名空间用于组织代码并防止名称冲突。
class Program { ... }
每个 C# 程序都是结构化的。它由类及其成员组成。类是 C# 程序的基本构建块。上面的代码是一个类定义。该定义有一个主体,以左大括号 {
开头,以右大括号 }
结尾。
static void Main(string[] args) { ... }
Main
是一个方法。方法是为完成特定工作而创建的一段代码。我们没有将所有代码都放在一个地方,而是将其分成多个部分,称为方法。这为我们的应用程序带来了模块化。每个方法都有一个主体,我们在其中放置语句。方法的主体用花括号括起来。
Main
方法的特定工作是启动应用程序。它是每个控制台 C# 程序的入口点。该方法被声明为 static
。这个静态方法可以在不需要创建 Program
类的实例的情况下被调用。首先我们需要启动应用程序,然后才能创建类的实例。void
关键字表示该方法不返回任何值。(方法可以返回或不返回值。)
Main
方法具有 args
参数,用于存储命令行参数。通过命令行参数,程序用户可以向其传递值。
Console.WriteLine("This is C#");
在这行代码中,我们将“This is C#”字符串打印到控制台。要将消息打印到控制台,我们使用 Console
类的 WriteLine
方法。该类代表控制台应用程序的标准输入、输出和错误流。请注意,Console
类是 System
命名空间的一部分。这一行就是使用 using System;
语句导入命名空间的原因。如果我们不使用该语句,我们将不得不使用 WriteLine
方法的完全限定名称:System.Console.WriteLine("This is C#");
。
$ dotnet run This is C#
C# 基础示例简化版
多年来,C# 得到了显著的改进和简化。对于初学者来说,该语言变得更加平易近人。
namespace Simple; class Program { static void Main(string[] args) { Console.WriteLine("This is C#"); } }
自 C# 10 起,我们可以省略 using System;
语句。它会自动包含在使用隐式 usings 中。
namespace Simple;
此外,命名空间声明也可以减少 (C# 10)。这被称为文件范围的命名空间,它减少了对块和缩进的需求。
使用顶级语句 (C# 9),我们可以进一步简化代码。我们不需要使用 Main
方法作为起点,并且代码不必放在应用程序类中。
对于小型程序,我们也可以省略命名空间声明。
Console.WriteLine("This is C#");
现在,最初的 12 行代码示例被简化为单行代码。
C# 控制台读取值
我们也可以使用 Console
类来读取值。
Console.Write("Enter your name: "); string name = Console.ReadLine(); Console.WriteLine($"Hello {name}");
第二个程序从控制台读取一个值并打印它。
string name = Console.ReadLine();
我们从终端读取一行。当我们按下 Enter 键时,输入被分配给 name 变量。输入存储到 name
变量中,该变量被声明为 string
类型。
Console.WriteLine($"Hello {name}");
在这行代码中,我们进行字符串格式化。{name}
说明符被替换为 name
变量的值。
$ dotnet run Enter your name: Jan Hello Jan
C# 命令行参数
C# 程序可以接收命令行参数。当我们运行程序时,它们会跟随程序名称。C# 程序在字符串的 args
数组中接收命令行参数。
for (int i = 0; i < args.Length; i++) { Console.WriteLine($"{args[i]}"); }
命令行参数可以传递给 Main
方法。
for (int i = 0; i < args.Length; i++) { Console.WriteLine($"{args[i]}"); }
我们使用 for 循环遍历这些参数的数组并将它们打印到控制台。Length
属性给出了数组中元素的数量。循环和数组将在稍后更详细地描述。
$ dotnet run 1 2 3 1 2 3
我们提供三个数字作为命令行参数,这些数字被打印到控制台。
C# 变量
变量是存储数据的地方。变量具有名称和数据类型。数据类型决定了可以分配给变量的值,例如整数、字符串或布尔值。在程序的运行过程中,变量可以获得相同数据类型的各种值。在对变量进行任何引用之前,变量始终初始化为其类型的默认值。
string city = "New York"; string name = "Paul"; int age = 35; string nationality = "American"; Console.WriteLine(city); Console.WriteLine(name); Console.WriteLine(age); Console.WriteLine(nationality); city = "London"; Console.WriteLine(city);
在该示例中,我们有四个变量。
string city = "New York";
我们声明一个字符串类型的 city 变量,并将其初始化为“New York”值。
string name = "Paul"; int age = 35;
我们声明并初始化另外两个变量。我们可以将两个语句放在一行上。但出于可读性考虑,每个语句应该放在单独的一行上。
Console.WriteLine(city); Console.WriteLine(name); Console.WriteLine(age); Console.WriteLine(nationality);
我们将变量的值打印到终端。
city = "London";
我们将一个新值分配给 city
变量。
$ dotnet run New York Paul 35 American London
var 关键字
方法范围内的变量可以使用 var
关键字进行隐式类型化。变量始终是强类型的,但使用 var
时,类型由 C# 编译器从赋值的右侧推断出来。
var name = "Peter"; var age = 23; Console.WriteLine($"{name} is {age} years old"); name = "Jozef"; age = 32; Console.WriteLine($"{name} is {age} years old"); Console.WriteLine(name.GetType()); Console.WriteLine(age.GetType());
在程序中,我们有两个隐式类型化的变量。
var name = "Peter"; var age = 23;
在赋值的左侧,我们使用 var
关键字。name
变量是 string
类型,age
变量是 int
类型。类型是从赋值的右侧推断出来的。
Console.WriteLine(name.GetType()); Console.WriteLine(age.GetType());
我们使用 GetType
确定变量的类型。
$ dotnet run Peter is 23 years old Jozef is 32 years old System.String System.Int32
C# List 集合
变量保存单个值,而多个值可以添加到集合中。List
是元素的序列,可以使用带 []
的索引操作来访问。可以使用例如 foreach
关键字来遍历列表的元素。
List
类型位于 System.Collections.Generic
中,该类型包含在使用隐式 usings 中。
List<string> words = ["stone", "rock", "falcon", "sky"]; Console.WriteLine(words[2]); Console.WriteLine(); foreach (var word in words) { Console.WriteLine(word); }
在该示例中,我们使用单词列表。
List<string> words = ["stone", "rock", "falcon", "sky"];
创建一个列表对象。在尖括号 (<>
) 之间,我们指定列表元素的数据类型。列表使用方括号 ([]
) 内的元素进行初始化。列表的每个元素用逗号分隔。
Console.WriteLine(words[2]);
这里我们将第三个元素打印到控制台。(索引从 0 开始。)
foreach (var word in words) { Console.WriteLine(word); }
使用 foreach 循环,我们遍历列表的所有元素并将它们打印到控制台。在每个循环中,word
变量被赋予列表中的一个元素。
$ dotnet run falcon stone rock falcon sky
C# 丢弃
丢弃是特殊的、只写的变量,用于丢弃程序员不感兴趣的值。_
(下划线字符)用于丢弃。
var vals = (1, 2, 3, 4, 5, 6); (int x, int y, int z, _, _, _) = vals; Console.WriteLine(x); Console.WriteLine(y); Console.WriteLine(z);
该示例定义了一个元组值。通过使用解构操作,我们将元组的值分配给变量。
var vals = (1, 2, 3, 4, 5, 6);
我们定义一个包含六个值的元组。元组是已排序的异构元素的集合。
(int x, int y, int z, _, _, _) = vals;
假设我们只对元组的前三个值感兴趣。在赋值的左侧,我们定义了三个变量:x
、y
和 y
。由于 vals
元组有六个元素,因此我们还需要在左侧有六个变量。这里我们可以使用 _
字符作为剩余变量。这样我们就表明,目前这些值对我们来说并不重要,我们不会使用它们。
C# Range 方法
Range
方法生成指定范围内的数字序列。第一个参数是序列中第一个整数的值。第二个参数是要生成的顺序整数的数量。
foreach(var el in Enumerable.Range(1, 10)) { Console.WriteLine(el); }
该示例使用 foreach 循环将值 1..10 打印到终端。整数序列是使用 Range
方法生成的。
C# 常量
与变量不同,常量保留其值。一旦初始化,它们就不能被修改。常量使用 const
关键字创建。
const int WIDTH = 100; const int HEIGHT = 150; int var = 40; var = 50; // WIDTH = 110;
在此示例中,我们声明两个常量和一个变量。
const int WIDTH = 100; const int HEIGHT= 150;
我们使用 const
关键字来通知编译器我们声明了一个常量。按照惯例,常量以大写字母书写。
int var = 40; var = 50;
我们声明并初始化一个变量。稍后,我们将一个新值分配给该变量。
// WIDTH = 110;
这对于常量是不可能的。如果我们取消注释此行,我们会得到一个编译错误。
C# 字符串格式化
从变量构建字符串是编程中非常常见的任务。C# 具有 string.Format
方法来格式化字符串。
int age = 34; string name = "William"; string msg = string.Format("{0} is {1} years old.", name, age); Console.WriteLine(msg);
字符串在 C# 中是不可变的。我们无法修改现有字符串。我们必须从现有字符串和其他类型创建新字符串。在代码示例中,我们创建一个新字符串。我们还使用来自两个变量的值。
int age = 34; string name = "William";
这里我们定义两个变量。
string msg = string.Format("{0} is {1} years old.", name, age);
我们使用内置字符串类的 Format
方法。{0}
、{1}
是变量被评估的地方。这些数字表示变量的位置。{0}
计算为第一个提供的变量,{1}
计算为第二个。
$ dotnet run William is 34 years old.
C# 字符串插值
一些动态语言(如 Perl、PHP 或 Ruby)支持字符串/变量插值。变量插值是用它们在字符串文字中的值替换变量。自 C# 6.0 以来,C# 支持变量插值。
string name = "Peter"; int age = 34; string msg = $"{name} is {age} years old"; Console.WriteLine(msg);
在代码示例中,我们使用变量插值构建一个字符串。
string msg = $"{name} is {age} years old";
字符串以 $
字符开头,变量位于花括号内。
$ dotnet run Peter is 34 years old
来源
在本文中,我们介绍了一些 C# 语言的基础知识。
作者
列出所有 C# 教程。