C# 编程语言学习指南
C# 是由微软开发的一种强类型、面向对象的编程语言,是 .NET 平台的主要语言之一。
目录
基础语法
变量和数据类型
// 基本数据类型
int number = 42;
string text = "Hello World";
bool isTrue = true;
double decimalNumber = 3.14;
// 类型推断
var inferredType = "自动推断为string类型";
// 常量
const int MAX_SIZE = 100;控制流
// if-else 语句
if (condition)
{
Console.WriteLine("条件为真");
}
else if (anotherCondition)
{
Console.WriteLine("另一个条件为真");
}
else
{
Console.WriteLine("所有条件都为假");
}
// switch 语句
switch (value)
{
case 1:
Console.WriteLine("值为1");
break;
case 2:
Console.WriteLine("值为2");
break;
default:
Console.WriteLine("其他值");
break;
}
// 循环
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
foreach (var item in collection)
{
Console.WriteLine(item);
}
while (condition)
{
// 循环体
}面向对象编程
类和对象
public class Person
{
// 字段
private string _name;
// 属性
public string Name
{
get { return _name; }
set { _name = value; }
}
// 自动属性
public int Age { get; set; }
// 构造函数
public Person(string name, int age)
{
Name = name;
Age = age;
}
// 方法
public void Introduce()
{
Console.WriteLine($"我叫{Name},今年{Age}岁");
}
}继承和多态
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("动物发出声音");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("汪汪汪!");
}
}
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("喵喵喵!");
}
}接口
public interface ILogger
{
void Log(string message);
void LogError(string error);
}
public class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine($"INFO: {message}");
}
public void LogError(string error)
{
Console.WriteLine($"ERROR: {error}");
}
}高级特性
泛型
public class GenericList<T>
{
private List<T> _items = new List<T>();
public void Add(T item)
{
_items.Add(item);
}
public T Get(int index)
{
return _items[index];
}
}
// 使用泛型
var stringList = new GenericList<string>();
stringList.Add("Hello");
stringList.Add("World");委托和事件
// 委托
public delegate void MessageHandler(string message);
public class Publisher
{
// 事件
public event MessageHandler MessageReceived;
public void SendMessage(string message)
{
MessageReceived?.Invoke(message);
}
}
public class Subscriber
{
public void OnMessageReceived(string message)
{
Console.WriteLine($"收到消息: {message}");
}
}
// 使用
var publisher = new Publisher();
var subscriber = new Subscriber();
publisher.MessageReceived += subscriber.OnMessageReceived;
publisher.SendMessage("Hello World");扩展方法
public static class StringExtensions
{
public static string Reverse(this string str)
{
return new string(str.Reverse().ToArray());
}
}
// 使用
string text = "Hello";
string reversed = text.Reverse(); // "olleH"异步编程
async/await
public async Task<string> GetDataAsync()
{
// 模拟异步操作
await Task.Delay(1000);
return "数据获取完成";
}
public async Task ProcessDataAsync()
{
try
{
string result = await GetDataAsync();
Console.WriteLine(result);
}
catch (Exception ex)
{
Console.WriteLine($"错误: {ex.Message}");
}
}并行编程
// 并行处理
var numbers = Enumerable.Range(1, 1000);
var results = numbers.AsParallel()
.Where(n => n % 2 == 0)
.Select(n => n * n)
.ToList();LINQ
查询语法
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// 查询语法
var evenNumbers = from n in numbers
where n % 2 == 0
select n;
// 方法语法
var evenNumbers2 = numbers.Where(n => n % 2 == 0);
// 排序
var sortedNumbers = numbers.OrderBy(n => n);
// 分组
var groupedNumbers = numbers.GroupBy(n => n % 2 == 0 ? "偶数" : "奇数");复杂查询
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
}
var products = new List<Product>
{
new Product { Id = 1, Name = "Laptop", Price = 999.99m, Category = "Electronics" },
new Product { Id = 2, Name = "Mouse", Price = 29.99m, Category = "Electronics" },
new Product { Id = 3, Name = "Book", Price = 19.99m, Category = "Books" }
};
// 复杂查询
var expensiveElectronics = from p in products
where p.Category == "Electronics" && p.Price > 50
orderby p.Price descending
select new { p.Name, p.Price };最佳实践
命名约定
// 类名使用PascalCase
public class UserManager { }
// 方法名使用PascalCase
public void GetUserById() { }
// 私有字段使用下划线前缀
private string _userName;
// 常量使用UPPER_CASE
public const int MAX_RETRY_COUNT = 3;异常处理
public void ProcessFile(string filePath)
{
try
{
// 可能抛出异常的代码
string content = File.ReadAllText(filePath);
ProcessContent(content);
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"文件未找到: {ex.Message}");
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine($"访问被拒绝: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"未知错误: {ex.Message}");
}
finally
{
// 清理资源
Console.WriteLine("处理完成");
}
}资源管理
// 使用using语句自动释放资源
using (var stream = new FileStream("file.txt", FileMode.Open))
{
// 使用stream
}
// C# 8.0+ 的简化语法
using var stream = new FileStream("file.txt", FileMode.Open);
// 使用stream常用框架
ASP.NET Core
// 控制器
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
[HttpGet]
public async Task<ActionResult<IEnumerable<User>>> GetUsers()
{
// 返回用户列表
return Ok(users);
}
[HttpPost]
public async Task<ActionResult<User>> CreateUser([FromBody] User user)
{
// 创建用户
return CreatedAtAction(nameof(GetUsers), user);
}
}Entity Framework Core
public class ApplicationDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("connection_string");
}
}
// 使用
using (var context = new ApplicationDbContext())
{
var users = context.Users.ToList();
var user = context.Users.FirstOrDefault(u => u.Id == 1);
}Unity 游戏开发
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 5f;
void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(horizontalInput, 0, verticalInput);
transform.Translate(movement * speed * Time.deltaTime);
}
}学习资源
常用工具
- Visual Studio - 主要的C#开发IDE
- Visual Studio Code - 轻量级编辑器
- JetBrains Rider - 跨平台C# IDE
- .NET CLI - 命令行工具
最后更新: 2024年
最近更新:12/9/2025, 2:17:56 AM