C#语言基础语法介绍

C#(读作 "C Sharp")是微软开发的一种面向对象的、类型安全的编程语言。它语法优雅,功能强大,结合了 C/C++ 的强大表现力和 Visual Basic 的易用性,是 .NET 平台的核心语言,广泛应用于桌面软件、Web 后端、游戏开发(Unity)和云服务。

以下是 C#基本语法的详细介绍:

1. 变量赋值

C# 是强类型语言,声明变量时通常需要指定类型,但也可以使用 var 让编译器自动推断。变量区分大小写。

csharp 复制代码
// 显式类型
int age = 25;
string name = "Alice";
bool isStudent = true;
// 隐式类型 (编译器根据右边的值推断类型)
var score = 99.5; // 推断为 double
var city = "Beijing"; // 推断为 string
// 常量 (赋值后不可修改)
const double PI = 3.14159;

2. 算术运算

与大部分 C 系语言一致。

csharp 复制代码
int a = 10, b = 3;
int add = a + b;       // 13
int sub = a - b;       // 7
int mul = a * b;       // 30
int div = a / b;       // 3 (整数除法,向下取整)
double divFloat = (double)a / b; // 3.333... (浮点数除法)
int mod = a % b;       // 1 (取余)
a++; // 自增 11
b--; // 自减 2

3. 逻辑运算

csharp 复制代码
bool x = true, y = false;
bool and = x && y;     // 逻辑与 (并且) -> false
bool or = x || y;      // 逻辑或 (或者) -> true
bool not = !x;         // 逻辑非 (取反) -> false
// 比较运算符: ==, !=, >, <, >=, <=

4. 基本数据结构

数字

C# 提供了极其丰富的数值类型,特别值得一提的是 decimal,它是专门为财务计算设计的超高精度浮点数。

csharp 复制代码
int i = 100;               // 32位整数
long l = 9999999999L;      // 64位整数
float f = 3.14f;           // 32位单精度浮点
double d = 3.1415926;      // 64位双精度浮点
decimal money = 199.99m;   // 128位高精度十进制数 (金融场景必备)
列表 (List)

对应其他语言的 Array List,长度可变。

csharp 复制代码
using System.Collections.Generic;
List<int> numbers = new List<int> { 1, 2, 3 };
numbers.Add(4);            // 添加元素
numbers.Remove(2);         // 移除元素
int first = numbers[0];    // 通过索引访问
集合

元素唯一,无序。

csharp 复制代码
HashSet<string> set = new HashSet<string> { "Apple", "Banana" };
set.Add("Orange");
set.Add("Apple");          // 重复添加无效,集合中只有一个 Apple
bool contains = set.Contains("Apple"); // true
Map (字典 Dictionary)

键值对存储,键唯一。

csharp 复制代码
Dictionary<string, int> dict = new Dictionary<string, int>
{
    { "Alice", 25 },
    { "Bob", 30 }
};
dict["Charlie"] = 22;      // 添加或修改
int age = dict["Alice"];   // 通过键访问值
// 安全访问方式,如果键不存在不会报错,返回默认值
dict.TryGetValue("David", out int davidAge); 

5. If 判断

csharp 复制代码
int score = 85;
if (score >= 90)
{
    Console.WriteLine("优秀");
}
else if (score >= 60)
{
    Console.WriteLine("及格");
}
else
{
    Console.WriteLine("不及格");
}

6. 循环

for 循环
csharp 复制代码
for (int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}
while 循环
csharp 复制代码
int count = 0;
while (count < 5)
{
    Console.WriteLine(count);
    count++;
}
foreach 循环 (C# 中极其常用)

用于遍历集合,比 for 更简洁安全。

csharp 复制代码
List<string> fruits = new List<string> { "Apple", "Banana" };
foreach (var fruit in fruits)
{
    Console.WriteLine(fruit);
}

7. 函数 (方法)

C# 中函数被称为方法,必须属于某个类。支持重载、可选参数和 Lambda 表达式。

csharp 复制代码
// 标准方法
public int Add(int a, int b)
{
    return a + b;
}
// 表达式体方法 (类似 Lambda,适用于单行代码)
public int Multiply(int a, int b) => a * b;
// 带默认参数的方法
public void Greet(string name, string greeting = "Hello")
{
    Console.WriteLine($"{greeting}, {name}!"); // 字符串插值
}

8. 类

C# 是纯粹的面向对象语言,一切皆对象。类是对象的蓝图。

csharp 复制代码
public class Person
{
    // 属性 (C# 特有的优雅语法,代替了传统的 Getter/Setter)
    public string Name { get; set; }
    public int Age { get; private set; } // 外部只读,内部可写
    // 构造函数
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    // 方法
    public void Introduce()
    {
        Console.WriteLine($"I'm {Name}, {Age} years old.");
    }
}
// 继承
public class Student : Person
{
    public string School { get; set; }
    // base 调用父类构造函数
    public Student(string name, int age, string school) : base(name, age) 
    {
        School = school;
    }
}

9. 异常处理

csharp 复制代码
try
{
    int[] arr = { 1, 2, 3 };
    Console.WriteLine(arr[5]); // 索引越界
}
catch (IndexOutOfRangeException ex) // 捕获特定异常
{
    Console.WriteLine("数组越界了: " + ex.Message);
}
catch (Exception ex) // 捕获所有异常
{
    Console.WriteLine("发生错误: " + ex.Message);
}
finally
{
    // 无论是否发生异常都会执行,常用于释放资源
    Console.WriteLine("清理完成");
}
// 主动抛出异常
if (Age < 0)
{
    throw new ArgumentException("年龄不能为负数");
}

10. C# 有别于其他语言的特殊语法

C# 在发展过程中引入了许多现代编程语言的特性,使其语法非常独特且高效:

① 属性

不像 Java 那样写冗长的 getName() 和 setName() 方法,C# 提供了属性语法,像访问字段一样访问方法逻辑:

csharp 复制代码
public class Circle
{
    private double radius;
    // 属性
    public double Radius 
    { 
        get { return radius; } 
        set { radius = value > 0 ? value : 0; } // value 是隐式变量
    }
    
    // 自动属性 (编译器自动生成私有字段)
    public string Color { get; set; } 
}
② 委托与事件

C# 在语言层面支持委托(类型安全的函数指针)和事件,这是观察者模式的完美实现。

csharp 复制代码
// 定义委托
public delegate void NotifyHandler(string msg);
public class Button
{
    // 事件 (基于委托)
    public event NotifyHandler OnClick;
    
    public void Click()
    {
        OnClick?.Invoke("Button was clicked"); // ?. 表示安全调用
    }
}
③ LINQ (语言集成查询)

这是 C# 最强大的杀手锏之一。 它允许你像写 SQL 一样在 C# 中查询各种数据源(集合、数据库、XML 等)。

csharp 复制代码
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
// 从集合中找出偶数,并按降序排列
var evenNumbers = from n in numbers
                  where n % 2 == 0
                  orderby n descending
                  select n;
// 也可以用方法链(Lambda)写法,效果一样:
var evenNumbers2 = numbers.Where(n => n % 2 == 0).OrderByDescending(n => n);
④ async / await 异步编程

C# 是最早引入 async/await 的语言之一,它让异步代码的写法看起来和同步代码一样直观,避免了回调地狱。

csharp 复制代码
public async Task<string> FetchDataAsync()
{
    using HttpClient client = new HttpClient();
    // await 暂停当前方法执行,等待异步操作完成,但不阻塞线程
    string data = await client.GetStringAsync("https://example.com"); 
    return data;
}
⑤ 可空引用类型 (C# 8.0+)

C# 严格区分可空和不可空类型。对于引用类型,默认不可为 null,如果想赋值 null,必须显式标记 ?,极大地减少了 NullReferenceException。

csharp 复制代码
string s1 = "Hello"; // 不可为null
// s1 = null; // 编译器会发出警告
string? s2 = null;   // 可为null,安全
⑥ 记录类 Record (C# 9.0+)

专门用于不可变数据对象的语法糖。内置了基于值的相等性判断(不需要重写 Equals)和 with 表达式(非破坏性修改)。

csharp 复制代码
// 一行代码定义一个不可变数据类
public record Person(string Name, int Age);
var p1 = new Person("Alice", 25);
var p2 = new Person("Alice", 25);
Console.WriteLine(p1 == p2); // True (属性值一样就相等)
// with 表达式:创建一个新对象,只修改部分属性
var p3 = p1 with { Age = 26 }; 
⑦ 顶级语句 (C# 9.0+)

以前写 C# 必须写一堆样板代码(namespace, class, Main 方法)。现在对于简单程序,可以直接写逻辑:

csharp 复制代码
// 这就是一个完整的 C# 程序
Console.WriteLine("Hello, World!");

总结:C# 是一门不断进化的语言。它既有 C/C++ 般的底层控制力(通过 unsafe 代码和指针),又拥有比 Java 更现代、更简洁的语法(属性、LINQ、Record 等),同时在 Unity 游戏开发和企业级后端开发中占据统治地位。

相关推荐
熊猫钓鱼>_>5 小时前
普通用户视角的端侧智能体验手记【鸿蒙心迹】
开发语言·人工智能·华为·智能手机·性能优化·ai编程·harmonyos
瑞雪兆丰年兮5 小时前
JavaWeb-day13-SpringBootWeb事务管理&AOP
java·开发语言·springboot·javaweb·事务·web·aop
布莱克6056 小时前
Swift 常量详解:从 let 到编译期优化
服务器·开发语言·ssh·swift·常量·let
布莱克6057 小时前
Swift 可选类型(Optionals)详解:从原理到实战
开发语言·安全·ssh·swift·optional·可选类型
瑞雪兆丰年兮9 小时前
JavaWeb-day14-SpringBootWeb原理篇
java·开发语言·spring boot·spring·bean·mybatis·javaweb
SomeOtherTime10 小时前
Rust生命周期介绍(AI回答)
开发语言·后端·rust
程序猿打工仔10 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
喵本喵叁肆11 小时前
Rényi 差分隐私:把隐私损失看成一族矩(英文原题:Rényi Differential Privacy (CSF 2017))
开发语言·r语言
Hvitur12 小时前
Java - Lambda
java·开发语言·python
xiaoye-duck12 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite