类(Class) 是面向对象编程的蓝图或模板,它定义了:
对象(Object) 是类的具体实例,是根据类定义创建的现实实体。

类与对象关系流程图
// 类:就像汽车的设计图纸
classCar
{
// 属性:颜色、品牌、速度等
publicstring Color { get; set; }
publicstring Brand { get; set; }
// 方法:启动、加速、刹车等
public void Start() { /* 启动逻辑 */ }
public void Accelerate() { /* 加速逻辑 */ }
}
// 对象:就像根据图纸制造的具体汽车
Car myCar = new Car(); // 我的汽车
Car yourCar = new Car(); // 你的汽车
using System;
// 定义一个Person类
classPerson
{
// 字段 - 存储数据
publicstring name;
publicint age;
// 方法 - 定义行为
public void Introduce()
{
Console.WriteLine($"你好,我叫{name},今年{age}岁。");
}
}
classProgram
{
static void Main()
{
// 创建Person类的对象(实例化)
Person person1 = new Person();
person1.name = "张三";
person1.age = 25;
person1.Introduce(); // 输出:你好,我叫张三,今年25岁。
Person person2 = new Person();
person2.name = "李四";
person2.age = 30;
person2.Introduce(); // 输出:你好,我叫李四,今年30岁。
}
}
字段是直接在类中声明的变量,用于存储对象的状态数据。
class Student
{
// 公共字段 - 通常使用小写字母开头
publicstring name;
publicint age;
// 私有字段 - 只能在类内部访问
privatedouble gpa;
// 静态字段 - 属于类本身,所有实例共享
privatestaticint studentCount = 0;
}
属性提供了对字段的安全访问机制,可以添加验证逻辑。

属性访问流程图
class BankAccount
{
privatedouble balance; // 私有字段
// 属性 - 提供对balance字段的受控访问
publicdouble Balance
{
get { return balance; } // 读取值
set
{
// 添加验证逻辑
if (value >= 0)
balance = value;
else
Console.WriteLine("余额不能为负数!");
}
}
privatestring accountNumber;
// 只读属性
publicstring AccountNumber
{
get { return accountNumber; }
}
}
当不需要额外逻辑时,可以使用简洁的自动属性:
class Product
{
// 自动属性 - 编译器自动生成私有字段
publicstring Name { get; set; }
publicdecimal Price { get; set; }
publicint Stock { get; set; }
// 只读自动属性(只能在构造函数中设置)
publicstring Category { get; }
// 带有不同访问级别的属性
publicstring InternalCode { get; privateset; }
}
class Employee
{
// 字段 - 用于内部计算,不需要外部访问
private DateTime hireDate;
privateint workingYears;
// 属性 - 需要验证或计算的公共数据
privatestring _name;
publicstring Name
{
get { return _name; }
set
{
if (!string.IsNullOrWhiteSpace(value))
_name = value.Trim();
else
thrownew ArgumentException("姓名不能为空");
}
}
// 计算属性(只有getter)
publicbool IsEligibleForPromotion
{
get { return workingYears >= 3; }
}
// 自动属性
publicstring Department { get; set; }
}
方法是类中定义行为的方式,包含执行特定任务的语句块。
class Calculator
{
// 无参数无返回值的方法
public void ShowWelcome()
{
Console.WriteLine("欢迎使用计算器!");
}
// 有参数无返回值的方法
public void PrintMessage(string message)
{
Console.WriteLine($"消息:{message}");
}
// 有参数有返回值的方法
public int Add(int a, int b)
{
return a + b;
}
// 多个参数的方法
public double CalculateBMI(double weight, double height)
{
return weight / (height * height);
}
}

方法调用执行流程图
同一个类中可以有多个同名方法,只要参数列表不同:
class MathOperations
{
// 整数相加
public int Add(int a, int b)
{
return a + b;
}
// 浮点数相加 - 参数类型不同
public double Add(double a, double b)
{
return a + b;
}
// 三个数相加 - 参数数量不同
public int Add(int a, int b, int c)
{
return a + b + c;
}
}

方法重载解析流程图
class ParameterDemo
{
// 值传递 - 传递参数的副本
public void IncrementValue(int number)
{
number++;
Console.WriteLine($"方法内: {number}");
}
// 引用传递 - 使用ref关键字
public void IncrementRef(ref int number)
{
number++;
Console.WriteLine($"方法内: {number}");
}
// 输出参数 - 使用out关键字
public void GetUserInfo(out string name, out int age)
{
name = "张三"; // 必须赋值
age = 25; // 必须赋值
}
}
构造函数在创建对象时自动调用,用于初始化对象。
class Book
{
publicstring Title { get; set; }
publicstring Author { get; set; }
publicdecimal Price { get; set; }
// 默认构造函数
public Book()
{
Title = "未知";
Author = "未知";
Price = 0;
}
// 参数化构造函数
public Book(string title, string author, decimal price)
{
Title = title;
Author = author;
Price = price;
}
// 构造函数重载
public Book(string title, string author) : this(title, author, 0)
{
// 使用this调用其他构造函数
}
}

对象生命周期流程图
静态构造函数用于初始化类的静态成员。
class Configuration
{
publicstaticstring DatabaseConnection { get; privateset; }
publicstatic DateTime InitializeTime { get; privateset; }
// 静态构造函数
static Configuration()
{
DatabaseConnection = "Server=localhost;Database=MyApp;";
InitializeTime = DateTime.Now;
}
}
class ResourceManager
{
privatestring resourceName;
public ResourceManager(string name)
{
resourceName = name;
}
// 析构函数
~ResourceManager()
{
Console.WriteLine($"资源 '{resourceName}' 正在被清理");
// 释放非托管资源
}
}
注意:在现代C#中,通常使用 IDisposable 接口而不是析构函数来管理资源。
class BankAccount
{
publicstring AccountNumber { get; }
publicstring Owner { get; set; }
publicdecimal Balance { get; privateset; }
// 静态字段
privatestaticint accountCount = 0;
public BankAccount(string owner, decimal initialBalance = 0)
{
AccountNumber = GenerateAccountNumber();
Owner = owner;
Balance = initialBalance;
accountCount++;
}
public void Deposit(decimal amount)
{
if (amount <= 0)
{
Console.WriteLine("存款金额必须大于0");
return;
}
Balance += amount;
Console.WriteLine($"成功存款 {amount:C},当前余额: {Balance:C}");
}
public void DisplayInfo()
{
Console.WriteLine("=== 账户信息 ===");
Console.WriteLine($"账号: {AccountNumber}");
Console.WriteLine($"户主: {Owner}");
Console.WriteLine($"余额: {Balance:C}");
}
private string GenerateAccountNumber()
{
return"ACC" + DateTime.Now.ToString("yyyyMMddHHmmss");
}
}

银行账户操作流程图
class Student
{
publicstring StudentId { get; }
publicstring Name { get; set; }
privatedouble[] grades;
// 计算属性
publicdouble GPA
{
get
{
if (grades.Length == 0) return0;
return grades.Average();
}
}
public Student(string studentId, string name)
{
StudentId = studentId;
Name = name;
grades = newdouble[0];
}
public void AddGrade(double grade)
{
Array.Resize(ref grades, grades.Length + 1);
grades[grades.Length - 1] = grade;
}
public void DisplayInfo()
{
Console.WriteLine($"学号: {StudentId}, 姓名: {Name}, 平均分: {GPA:F1}");
}
}

学生成绩管理流程图
class GameCharacter
{
publicstring Name { get; }
publicint Health { get; privateset; }
publicbool IsAlive => Health > 0;
public GameCharacter(string name)
{
Name = name;
Health = 100;
}
public void Attack(GameCharacter target)
{
if (!IsAlive || !target.IsAlive) return;
int damage = 20;
target.TakeDamage(damage);
Console.WriteLine($"{Name} 攻击了 {target.Name}");
}
public void TakeDamage(int damage)
{
Health -= damage;
if (Health < 0) Health = 0;
}
}

游戏战斗系统流程图

面向对象核心概念关系图
创建一个完整的图书馆管理系统,包含以下功能:
Book类:
Member类:
Library类:

图书馆系统架构图

图书借阅流程
通过这个完整的项目,你将全面掌握C#面向对象编程的核心概念和实践技能!
教程源码已上传网盘,需要请自取
(点击关注,修炼不迷路👇)
▌转载请注明出处,渡人渡己
🌟 感谢道友结缘! 若本文助您突破修为瓶颈,不妨【打赏灵丹】或【转发功德】,让更多道友共参.NET天道玄机。修真之路漫漫,我们以代码为符,共绘仙途!