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 游戏开发和企业级后端开发中占据统治地位。

相关推荐
校园安全大脑平台1 小时前
校园安全平台过等保二级,开发阶段要注意什么
开发语言·安全·php
只睡四小时1 小时前
端侧推理:face-api.js 首屏 92% 是白下载的
开发语言·javascript·人脸识别·ecmascript·tensorflow.js·face-api.js·端侧推理
yuzhiboyouye2 小时前
com.fasterxml.jackson.annotation 里最常用高频的注解,可以按“控制字段、控制格式、控制结构、控制流程”来记
java·开发语言
HAPPY酷2 小时前
C++ 内存泄漏排查:从裸 new 到 RAII 修复,附 ASan 实战
开发语言·c++
十年Java程序媛2 小时前
Java 面试常问 this、super:构造方法调用顺序避坑
java·开发语言·spring boot·面试·个人开发
人丰2 小时前
一次生产卡顿复盘:BI 数据抽取引发 PostgreSQL 长事务事故
数据库·c#
yuniko-n2 小时前
【JUC】内存屏障
java·开发语言
Linux运维技术栈2 小时前
近期 PHP 高危安全风险排查与多环境升级实操
开发语言·安全·php
Fnetlink13 小时前
Fnet 云网安 261023
运维·开发语言·网络·人工智能·安全·web安全·php