在这里插入图片描述

通过前三篇的学习,我们已经掌握了 C# 变量、运算符、控制流、数组、集合 全套基础语法。

到这里,你已经可以写逻辑代码、处理批量数据,完成简单的计算、遍历、数据存储需求。

但很多新手会发现一个致命问题:代码只能写“小脚本”,写不出真正的项目

所有代码全部堆砌在 Main 方法里,代码越长越乱、无法复用、无法分层、无法维护,完全不符合企业项目开发规范。

而今天这篇文章,将带你突破这个瓶颈,正式迈入 C# 最核心、最重要、贯穿所有项目的核心思想——面向对象编程

类与对象,是C#的灵魂,也是零基础和进阶开发者的分水岭。

学完本文,你将彻底告别“堆砌式代码”,学会用模块化、结构化思维写代码,真正具备开发正规项目的基础能力。

一、为什么说:类和对象是C#的核心?

首先记住一句 C# 铁律:C# 是纯面向对象语言,万物皆可对象。

我们之前学的 int、string、数组、List 本质都是对象,只是系统提前帮我们封装好了,我们直接拿来用而已。

在没有类和对象之前,我们的代码逻辑是面向过程:一步一步写流程,代码和数据分离,杂乱且无法复用。

而有了类和对象之后,我们可以:

  • 数据行为封装在一起

  • 自定义属于自己的数据结构

  • 实现代码复用、分层、解耦

  • 开发大型项目、桌面软件、游戏、后端服务

没有类和对象,你只会写代码;学会类和对象,你才会做项目。

二、零基础秒懂:类和对象到底是什么?

很多新手被教程晦涩的定义劝退,这里给你最通俗、最精准的解释,记住这组对应关系,彻底吃透核心:

核心定义(必背)

类(Class):模板、图纸、抽象概念

对象(Object):实例、成品、具体个体

生活化举例,彻底通透

以「学生」为例:

学生类:是一个抽象模板,定义了学生都拥有的特征(姓名、年龄、成绩)和行为(学习、考试)。

学生对象:张三、李四、王五,每一个具体的学生,都是学生类的一个具体实例。

一句话总结:

类是对象的模板,对象是类的实例。

模板只定义规则,不存具体数据;对象才是真正存储数据、执行逻辑的载体。

三、C# 类与对象完整实操(零基础可跑)

我们抛开抽象概念,直接上手代码,手把手实现一个「学生类」,搞懂类的组成、对象的创建与调用。

1. 类的核心组成

一个标准的类,由两部分构成:

  • 字段/属性:描述事物的数据特征(姓名、年龄、分数)

  • 方法:描述事物的行为功能(学习、计算成绩、展示信息)

2. 完整实战代码

using System;

// 1. 定义学生类(模板)
class Student
{
    // 字段:描述学生的数据特征
    public string Name;
    public int Age;
    public int Score;

    // 方法:描述学生的行为
    public void Study()
    {
        Console.WriteLine($"{Name} 正在努力学习!");
    }

    // 展示学生完整信息
    public void ShowInfo()
    {
        Console.WriteLine($"姓名:{Name},年龄:{Age},成绩:{Score}");
    }
}

class Program
{
    static void Main()
    {
        // 2. 根据类,创建对象(实例化)
        Student zhangSan = new Student();

        // 3. 给对象赋值
        zhangSan.Name = "张三";
        zhangSan.Age = 18;
        zhangSan.Score = 95;

        // 4. 调用对象的方法
        zhangSan.Study();
        zhangSan.ShowInfo();

        // 可以创建无数个对象,复用同一个类模板
        Student liSi = new Student();
        liSi.Name = "李四";
        liSi.Age = 17;
        liSi.Score = 88;
        liSi.ShowInfo();
    }
}

3. 核心重点解析(重中之重)

  • new 关键字:唯一作用就是根据类的模板,在内存中开辟空间,创建具体对象

  • 一个类可以无限实例化多个对象,所有对象相互独立、数据互不干扰

  • 字段用来存数据,方法用来写逻辑,彻底实现数据和逻辑绑定

四、核心重难点:构造函数(新手必掌握)

上面的代码中,我们创建对象后,需要逐行给字段赋值,非常繁琐。

所以 C# 提供了构造函数,这是类中最特殊、最高频的核心方法,也是面试、项目必考重点。

1. 构造函数核心特性

  • 函数名必须和类名完全一致

  • 没有返回值(连void都不用写)

  • 创建对象(new)的瞬间自动执行,无需手动调用

  • 核心作用:快速初始化对象数据

2. 带参构造函数实战(优化代码)

using System;

class Student
{
    public string Name;
    public int Age;
    public int Score;

    // 自定义构造函数:创建对象时直接赋值
    public Student(string name, int age, int score)
    {
        Name = name;
        Age = age;
        Score = score;
        Console.WriteLine("学生对象初始化完成!");
    }

    public void ShowInfo()
    {
        Console.WriteLine($"姓名:{Name},年龄:{Age},成绩:{Score}");
    }
}

class Program
{
    static void Main()
    {
        // 创建对象时直接传参,一步初始化数据
        Student zhangSan = new Student("张三", 18, 95);
        zhangSan.ShowInfo();

        Student liSi = new Student("李四", 17, 88);
        liSi.ShowInfo();
    }
}

对比可以明显看出:构造函数大幅简化了对象初始化代码,是项目开发的标准写法。

五、面向对象核心:封装思想(项目核心规范)

学了类和对象,必须同步掌握 三大特性之首:封装

前面我们直接公开字段(public),会存在严重问题:外部可以随意修改数据,无法校验数据合法性。

比如:年龄可以被改成 -10、成绩可以改成 9999,数据完全失控。

1. 封装核心逻辑

私有化字段,公开方法

  • 字段用 private 私有,禁止外部直接修改

  • 通过公开方法,可控地获取/修改数据,增加数据校验

2. 封装实战案例

using System;

class Student
{
    // 私有字段:外部无法直接访问
    private string _name;
    private int _age;

    // 公开方法:设置姓名
    public void SetName(string name)
    {
        if (!string.IsNullOrEmpty(name))
        {
            _name = name;
        }
    }

    // 公开方法:获取姓名
    public string GetName()
    {
        return _name;
    }

    // 带校验的年龄设置
    public void SetAge(int age)
    {
        if (age > 0 && age < 100)
        {
            _age = age;
        }
        else
        {
            Console.WriteLine("年龄输入不合法!");
        }
    }

    public int GetAge()
    {
        return _age;
    }
}

class Program
{
    static void Main()
    {
        Student stu = new Student();
        stu.SetName("张三");
        stu.SetAge(18);
        Console.WriteLine($"姓名:{stu.GetName()},年龄:{stu.GetAge()}");

        // 非法数据会被拦截
        stu.SetAge(-5);
    }
}

封装的意义:保护数据安全,统一数据访问规则,这是企业项目的硬性规范。

六、联动前文:类+集合 实现真实业务场景

单独的类和对象作用有限,结合上一篇学的 List集合,就能实现真实项目的批量数据管理,这是新手必须掌握的组合用法。

实战案例:批量管理学生信息

using System;
using System.Collections.Generic;

class Student
{
    public string Name { get; set; }
    public int Score { get; set; }

    public void ShowInfo()
    {
        Console.WriteLine($"学生:{Name},成绩:{Score}");
    }
}

class Program
{
    static void Main()
    {
        // 用List存储多个学生对象,实现批量数据管理
        List<Student> studentList = new List<Student>()
        {
            new Student(){ Name = "张三", Score = 95 },
            new Student(){ Name = "李四", Score = 88 },
            new Student(){ Name = "王五", Score = 92 }
        };

        // 遍历批量展示所有学生信息
        foreach (var stu in studentList)
        {
            stu.ShowInfo();
        }
    }
}

到这里,你已经打通了 基础语法 + 批量数据 + 面向对象 的完整闭环,具备编写小型业务程序的全部能力。

七、新手高频易错坑点(必避)

  • 分不清类和对象:类是模板,不能存数据;只有new出来的对象,才是真实数据载体

  • 忘记new实例化:定义类变量后不new,会出现空引用报错,是新手最高频bug

  • 构造函数写错:构造函数名必须和类名一致,不能加返回值

  • 封装意识缺失:项目开发禁止直接公开字段,必须通过方法/属性管控数据

  • 对象数据混淆:多个对象相互独立,修改一个对象的数据,不会影响其他对象

八、全文核心总结

  1. 类是模板,对象是实例,类定义规则,对象存储真实数据;

  2. 类由**字段(数据)+ 方法(行为)**组成,实现数据与逻辑的绑定;

  3. 构造函数用于对象初始化,是项目开发的标准初始化方式;

  4. 封装是面向对象第一核心特性,保护数据安全,规范代码结构;

  5. 类+集合的组合,是项目中批量管理自定义数据的核心方案。

类与对象是C#的核心根基,后续的继承、多态、接口、泛型、项目分层、框架开发,全部基于本文知识点延伸。吃透本篇,才算真正入门C#开发。
在这里插入图片描述

下期预告

下一篇我们将精讲 C# 属性、继承与多态,彻底完善面向对象三大特性,解锁高级代码复用能力,从基础面向对象进阶到标准化项目开发!

更多推荐