-
面向对象编程进阶
继承
csharp
// 基类
public class Animal
{
public string Namepublic virtual void Speak()
{
Console.WriteLine("动物发出声音");
}
}
// 派生类
public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("汪汪!");
}
}
// 使用
Dog dog = new Dog { Name = "Buddy" };
dog.Speak(); // 输出:汪汪!
抽象类和接口
csharp
// 抽象类
public abstract class Shape
{
public abstract double CalculateArea();
}
// 接口
public interface IDrawable
{
void Draw();
}
// 实现
public class Circle : Shape, IDrawable
{
public double Radius { get; set; }
public override double CalculateArea()
{return Math.PI * Radius * Radius;
}public void Draw()
{Console.WriteLine("绘制圆形");
}
}
12. 属性和访问器
csharp
public class Person
{
private string name;
private int age;
// 自动属性
public string Email { get; set; }// 完整属性
public string Name
{get { return name; }set { if (!string.IsNullOrEmpty(value))name = value; }
}// 只读属性
public int BirthYear { get; private set; }// 计算属性
public bool IsAdult => age >= 18;
}
13. 委托和事件
csharp
// 委托定义
public delegate void MessageHandler(string message);
public class Publisher
{
// 事件定义
public event MessageHandler OnMessageSent;
public void SendMessage(string message)
{Console.WriteLine($"发送消息: {message}");OnMessageSent?.Invoke(message); // 触发事件
}
}
public class Subscriber
{
public void HandleMessage(string message)
{
Console.WriteLine($"收到消息: {message}");
}
}
// 使用
var publisher = new Publisher();
var subscriber = new Subscriber();
publisher.OnMessageSent += subscriber.HandleMessage;
publisher.SendMessage("Hello World!");
14. LINQ (语言集成查询)
csharp
List
// 查询语法
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
// 方法语法
var squares = numbers.Where(n => n % 2 == 0)
.Select(n => n * n);
// 更多LINQ操作
var firstNumber = numbers.First();
var lastNumber = numbers.Last();
var maxNumber = numbers.Max();
var orderedNumbers = numbers.OrderBy(n => n);
var groupedNumbers = numbers.GroupBy(n => n % 2 == 0 ? "偶数" : "奇数");
15. 泛型
csharp
// 泛型类
public class Repository
{
private List
public void Add(T item)
{items.Add(item);
}public T Get(int index)
{return items[index];
}
}
// 泛型方法
public static T Max
{
return a.CompareTo(b) > 0 ? a : b;
}
// 使用
var stringRepo = new Repository
stringRepo.Add("Hello");
var intRepo = new Repository
intRepo.Add(42);