百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

C# 编程入门必看!第2弹:面向对象编程:从0到1的趣味指南

liebian365 2025-03-03 19:17 13 浏览 0 评论

大家好呀!今天我要带你们一起走进C#的面向对象世界,让我们一起用有趣的方式学习这个强大的编程知识!

一、什么是面向对象?

面向对象是一种编程范式,它以“对象”为核心。简单来说,就是把程序看作是由多个“事物”组成,每个“事物”都有自己的属性和行为。比如,我们可以把汽车看作一个对象,它有颜色(属性)、品牌(属性)以及加速(行为)、刹车(行为)。面向对象编程的三个核心概念是封装、继承和多态,我们后面会详细介绍!


二、类与对象:一切皆可定义

可以理解为一个蓝图或模板,用于描述一类事物的共同特征。比如,Person类可能包括姓名、年龄等属性;而 对象 则是根据这个蓝图创建的具体实例。

示例代码:


// 定义一个Person类
public class Person
{
    // 属性:描述对象的特征
    public string Name { get; set; }
    public int Age { get; set; }

    // 方法:定义对象的行为
    public void Introduce()
    {
        Console.WriteLine($"大家好,我叫{this.Name},今年{this.Age}岁。");
    }
}

// 创建对象并调用方法
Person person = new Person();
person.Name = "小明";
person.Age = 25;
person.Introduce(); // 输出:大家好,我叫小明,今年25岁。

是不是很简单? 类就像图纸,对象是根据它建造的“房子”!


三、属性、字段和方法:对象的三大法宝

属性(Property)

属性是对对象行为或状态的描述。比如Name就是Person类的一个属性。


public string Name { get; set; } // 可读可写的属性

字段(Field)

字段是类中声明的变量,通常用于存储数据。比如:


private int age; // 私有字段,只能在类内部访问

方法(Method)

方法描述了对象可以执行的操作。比如Introduce()是一个方法。


public void Introduce()
{
    Console.WriteLine("Hello, I'm a person!");
}

小贴士: 属性通常是对字段的封装,这样可以更好地控制数据访问!


四、构造函数与析构函数:对象的生与死

构造函数(Constructor)

当一个对象被创建时,构造函数会被自动调用。它用于初始化对象的状态。


public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    // 无参构造函数
    public Person()
    {
        Console.WriteLine("一个新生命诞生了!");
    }

    // 有参构造函数
    public Person(string name, int age)
    {
        this.Name = name;
        this.Age = age;
        Console.WriteLine($"欢迎{name}!你今年{age}岁啦!");
    }
}

// 使用无参构造函数创建对象:
Person person1 = new Person(); // 输出:一个新生命诞生了!

// 使用有参构造函数创建对象:
Person person2 = new Person("小红", 30); // 输出:欢迎小红!你今年30岁啦!

析构函数(Destructor)

析构函数在对象被销毁时调用,通常用于释放资源。


public class Person : IDisposable
{
    public string Name { get; set; }

    ~Person()
    {
        // 这里执行清理操作
        Console.WriteLine($"{Name}离开了...");
    }
}

// 创建对象并释放它:
using (Person person = new Person()) { } // 输出:离开了...

有趣的是,析构函数就像是给对象办“后事”!殡葬仪式开始!


五、继承与多态:代码复用的小魔法

继承(Inheritance)

通过继承,我们可以让一个类“继承”另一个类的属性和方法。


// 基类
public class Animal
{
    public void Eat()
    {
        Console.WriteLine("动物需要吃饭!");
    }
}

// 派生类
public class Dog : Animal // 狗继承自Animal
{
    public void Bark()
    {
        Console.WriteLine("汪汪汪...");
    }
}

Dog dog = new Dog();
dog.Eat();   // 输出:动物需要吃饭!
dog.Bark();  // 输出:汪汪汪...

多态(Polymorphism)

多态允许子类重写父类的方法,从而呈现出不同的行为。


public class Animal
{
    public virtual void Move()
    {
        Console.WriteLine("动物在移动...");
    }
}

public class Dog : Animal
{
    public override void Move()
    {
        Console.WriteLine("狗在跑!");// 子类重写方法
    }
}

Animal animal = new Animal();
animal.Move(); // 输出:动物在移动...

Dog dog = new Dog();
dog.Move();    // 输出:狗在跑!

继承就像“传家宝”,多态则给了子代更多的个性发展空间!


六、抽象类与接口:定义规范的两大高手

抽象类(Abstract Class)

抽象类不能被实例化,它主要用于提供一个基类,供其他类继承。


public abstract class Shape // 抽象类
{
    public abstract void Draw(); // 抽象方法,子类必须重写
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("我是一个圆圈!");
    }
}

Circle circle = new Circle();
circle.Draw();

接口(Interface)

接口定义了一组行为规范,任何实现该接口的类都必须提供这些方法。


public interface IRenderer
{
    void Render(); // 定义一个渲染方法
}

public class ConsoleRenderer : IRenderer
{
    public void Render()
    {
        Console.WriteLine("在控制台渲染内容...");
    }
}

ConsoleRenderer renderer = new ConsoleRenderer();
renderer.Render();

接口就像是“合同”,一旦签下,就必须履行条款!


七、封装:保护隐私的小卫士

封装就是将类的成员分为公开(public)和私有(private)两种访问级别。比如:


public class Wallet // 钱包类
{
    private decimal _balance = 100; // 私有字段,只能在类内部访问

    public void DisplayBalance()
    {
        Console.WriteLine($"账户余额:{_balance}元");
    }
}

Wallet wallet = new Wallet();
wallet.DisplayBalance(); // 输出:账户余额:100元

封装就像是给数据穿上了一件“隐身衣”,只有特定的人能看到!cloak and dagger


八、总结与福利?

今天我们一起学习了C#面向对象的基本知识,包括类和对象的特点、属性字段方法的定义方式,以及继承、多态、抽象类和接口的使用技巧。掌握这些知识点后,你就能写出更优雅、更规范的代码啦!

记得点赞分享哦!你的支持是我最大的动力~??


创作不易,求点三连,过个好年~

相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: