在这一章中,我们将深入探讨C#的基本语法,这是任何想要掌握这门语言的人都必须理解的核心概念。C#是一种现代、通用、面向对象的编程语言,它结合了C和C++的优秀特性,并添加了一些新的元素来简化开发过程。
变量与数据类型
声明变量
在C#中,声明一个变量需要指定变量的类型以及变量名。例如:
int age; string name;
这里我们声明了一个整型变量age
和一个字符串类型的变量name
。
数据类型
C#的数据类型可以分为两大类:值类型和引用类型。
值类型
值类型包括数值类型、布尔类型和结构类型等。这些类型的变量直接存储数据的值。例如:
byte myByte = 255; // 无符号8位整数 short myShort = -32768; // 有符号16位整数 long myLong = 9223372036854775807; // 有符号64位整数 float myFloat = 3.14f; // 单精度浮点数 double myDouble = 3.141592653589793238; // 双精度浮点数 bool myBool = true; // 布尔值 char myChar = 'A'; // 字符 decimal myDecimal = 123.45m; // 高精度浮点数
引用类型
引用类型包括类、接口、数组、委托等。引用类型不直接存储数据,而是存储指向数据的引用。例如:
string message = "Hello, World!"; object obj = new object();
变量的作用域
变量的作用域决定了它在代码中的可见性和生命周期。C#中有三种作用域:全局作用域、局部作用域和块作用域。
- 全局作用域:在类外部声明的变量。
- 局部作用域:在方法或语句块内部声明的变量。
- 块作用域:在特定代码块(如if语句或循环体)内部声明的变量。
-- -------------------- ---- ------- ----- ------- - ------ --- --------- - --- -- ----- ------ ---- ------------- ----- - --- -------- - --- -- ----- -- ------ - --- -------- - --- -- ---- - -- ---------------------------- -- ----------------- - -
控制流语句
控制流语句用于改变程序执行的顺序。C#提供了多种控制流语句,包括条件语句和循环语句。
条件语句
if 语句
if
语句允许根据条件执行不同的代码块。
-- -------------------- ---- ------- --- ------ - --- -- ------- - -- - ------------------------- -- ------------ - ---- -- ------- - -- - ------------------------- -- ------------ - ---- - ------------------------- -- -------- -
switch 语句
switch
语句用于基于一个表达式的值执行不同的代码块。
-- -------------------- ---- ------- --- --------- - -- ------ ----------- - ---- -- ---------------------------- ------ ---- -- ----------------------------- ------ ---- -- ------------------------------- ------ -------- ------------------------ ------ ------ -
循环语句
while 循环
while
循环会重复执行一段代码,直到给定的条件不再满足。
int count = 0; while (count < 5) { Console.WriteLine($"Count: {count}"); count++; }
do-while 循环
do-while
循环类似于while
循环,但它至少会执行一次循环体内的代码。
int counter = 0; do { Console.WriteLine($"Counter: {counter}"); counter++; } while (counter < 5);
for 循环
for
循环适用于已知迭代次数的情况。
for (int i = 0; i < 5; i++) { Console.WriteLine($"Iteration {i}"); }
foreach 循环
foreach
循环用于遍历集合中的每个元素。
int[] numbers = { 1, 2, 3, 4, 5 }; foreach (int number in numbers) { Console.WriteLine(number); }
方法
方法是执行特定任务的一段代码。它们可以接受参数并返回结果。
定义方法
定义方法时,需要指定返回类型、方法名以及可能的参数列表。
static int Add(int a, int b) { return a + b; }
调用方法
可以通过方法名和传递适当的参数来调用方法。
int sum = Add(10, 20); Console.WriteLine(sum); // 输出:30
参数
C#支持多种参数类型,包括值参数、引用参数和输出参数。
值参数
默认情况下,参数按值传递,这意味着方法接收到的是原始值的一个副本。
void Increment(int number) { number++; } int num = 10; Increment(num); Console.WriteLine(num); // 输出:10
引用参数
通过使用ref
关键字,参数可以按引用传递,这样方法可以直接修改原始变量。
void Increment(ref int number) { number++; } int num = 10; Increment(ref num); Console.WriteLine(num); // 输出:11
输出参数
out
参数允许方法返回多个值。这些参数必须在调用方法之前初始化。
-- -------------------- ---- ------- ---- ------------- --- -- --- --- -- - - - -- - - -- - --- -- -- ------------- -- --- --- ------------------------ ------ -- ----- -
数组
数组是存储一组相同类型数据的容器。
创建数组
创建数组的方法有两种:使用数组字面量或者指定大小。
// 使用数组字面量 int[] numbers = { 1, 2, 3, 4, 5 }; // 指定大小 string[] names = new string[3]; names[0] = "Alice"; names[1] = "Bob"; names[2] = "Charlie";
访问数组元素
可以使用索引来访问数组中的元素。
int firstNumber = numbers[0]; // 获取第一个元素 string secondName = names[1]; // 获取第二个元素
多维数组
多维数组可以用来表示矩阵或其他多维度的数据结构。
-- -------------------- ---- ------- ------ ------ - --- ------ --- --------- -- - -- --------- -- - -- --------- -- - -- --------- -- - -- --------- -- - -- --------- -- - -- --------- -- - -- --------- -- - -- --------- -- - --
数组操作
C#提供了许多内置方法来处理数组,例如排序和搜索。
Array.Sort(numbers); // 对数组进行排序 int index = Array.IndexOf(numbers, 3); // 查找元素的位置
类与对象
类是对象的蓝图,而对象则是类的实例。类定义了对象的状态和行为。
定义类
使用class
关键字定义一个新的类。
-- -------------------- ---- ------- ------ ----- ------ - ------ ------ ---- - ---- ---- - ------ --- --- - ---- ---- - ------ ---- ---------- - -------------------------- -- ---- -- ------ --- - -- ----- ----- ------- - -
创建对象
通过使用new
关键字和类的构造函数来创建对象。
Person person = new Person(); person.Name = "John"; person.Age = 30; person.SayHello(); // 输出:Hello, my name is John and I am 30 years old.
构造函数
构造函数是在创建对象时自动调用的方法。它们通常用于初始化对象的属性。
-- -------------------- ---- ------- ------ ----- ------- - ------ ------ ---- - ---- ------- ---- - ------ --- ----- - ---- ------- ---- - ------ -------------- ----- --- ------ - ---- - ----- ----- - ------ - - ------- ------- - --- ---------------- ----
继承
继承允许一个类从另一个类派生,从而继承其属性和方法。
-- -------------------- ---- ------- ------ ----- ------- - ------ - ------ ------ ------- - ---- ---- - ------ ---- ------- - --------------------- ----- ------------- - - ------- ------- - --- ---------- ------------ - ---- ------- ----------- - --- --------------- - ------- ------------------- -- ------------- ---------------- -- -------------
接口
接口定义了一组方法和属性,但不提供实现。实现接口的类必须提供接口所声明的所有成员的实现。
-- -------------------- ---- ------- ------ --------- ------- - ---- ------------ - ------ ----- --- - ------- - ------ ---- ----------- - --------------------------- - - ------ ----- --- - ------- - ------ ---- ----------- - --------------------------- - - --- --- - --- ------ --- --- - --- ------ ---------------- -- -------- ---------------- -- --------
异常处理
异常处理允许程序在发生错误时优雅地处理问题,而不是崩溃。
try-catch 结构
使用try-catch
结构捕获和处理异常。
try { int result = 10 / 0; } catch (DivideByZeroException ex) { Console.WriteLine("Cannot divide by zero!"); }
finally 块
finally
块确保某些代码在任何情况下都会被执行,即使发生了异常。
-- -------------------- ---- ------- --- - --- ------ - -- - -- - ----- ---------------------- --- - ------------------------- ------ -- -------- - ------- - -------------------------- ----- ------------ -
throw 关键字
使用throw
关键字可以手动抛出异常。
-- -------------------- ---- ------- ------ ---- ------------ ---- - -- ---- - -- - ----- --- -------------------------------- ------ -- ------------ - - -------------
总结
这一章涵盖了C#的基本语法,包括变量与数据类型、控制流语句、方法、数组、类与对象以及异常处理。掌握了这些基本概念后,你将能够编写更复杂和功能丰富的C#程序。接下来,我们可以进一步探讨更多高级主题,如泛型、委托和事件等。