问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C#面向对象编程三部曲:封装、继承与多态,你真的玩转了吗?

创作时间:
作者:
@小白创作中心

C#面向对象编程三部曲:封装、继承与多态,你真的玩转了吗?

引用
CSDN
1.
https://m.blog.csdn.net/z_344791576/article/details/142844476

嘿,编程小达人们!今天咱们要深入探讨C#面向对象编程的三大基石——封装、继承与多态。想象一下,它们就像是编程世界的魔法三件套,每一样都藏着无穷的魅力与力量。那么,你准备好揭开它们的神秘面纱,掌握这三大魔法的奥秘了吗?

第一幕:封装——守护秘密的小精灵

封装,就像是给你的代码穿上了一层神秘的外衣,让外界只能看到你想展示的部分,而隐藏起那些敏感和复杂的内部实现。这样做的好处多多,不仅保护了数据的安全,还简化了外部对对象的操作。

示例代码

public class BankAccount
{
    // 私有字段,外部无法直接访问
    private double balance;
    // 公共属性,提供对私有字段的访问
    public double Balance
    {
        get { return balance; }
        set
        {
            if (value < 0)
            {
                throw new ArgumentException("Balance cannot be negative.");
            }
            balance = value;
        }
    }
    // 存款方法
    public void Deposit(double amount)
    {
        if (amount <= 0)
        {
            throw new ArgumentException("Deposit amount must be positive.");
        }
        balance += amount;
    }
    // 取款方法(略去具体实现,仅作示例)
    // ...
}

深度分析

  • BankAccount类中,balance字段被声明为private,这意味着它只能在类内部被访问和修改,从而保护了账户余额的安全。
  • 通过公共属性Balancegetset访问器,我们允许外部代码安全地获取和设置账户余额,同时可以在set访问器中添加验证逻辑,确保余额不会变为负数。

第二幕:继承——站在巨人的肩膀上

继承,就像是你站在了前人的肩膀上,可以直接使用他们已经创造好的东西,并在此基础上进行扩展和创新。在C#中,继承允许我们定义一个类(子类)来继承另一个类(父类)的属性和方法,从而实现代码的重用和扩展。

示例代码(假设有一个Animal父类和它的Dog子类):

public class Animal
{
    public void Eat()
    {
        Console.WriteLine("This animal is eating.");
    }
}
public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine("Woof!");
    }
}
// 使用
Dog myDog = new Dog();
myDog.Eat(); // 继承自Animal的方法
myDog.Bark(); // Dog类特有的方法

深度分析

  • Dog类通过冒号:操作符继承了Animal类,因此它自动获得了Animal类的所有公共和受保护成员(包括方法和属性)。
  • Dog类中,我们添加了一个新的方法Bark,这是Dog类特有的行为。

第三幕:多态——千变万化的魔法

多态,是面向对象编程中最令人着迷的特性之一。它允许我们以统一的接口处理不同的对象,这些对象在运行时可以有不同的表现形式。多态主要通过抽象类、接口和虚方法来实现。

示例代码(使用抽象类和虚方法):

public abstract class Shape
{
    public abstract void Draw();
}
public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle.");
    }
}
public class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a rectangle.");
    }
}
// 使用
Shape shape;
shape = new Circle();
shape.Draw(); // 输出:Drawing a circle.
shape = new Rectangle();
shape.Draw(); // 输出:Drawing a rectangle.

深度分析

  • 我们定义了一个抽象类Shape和一个抽象方法Draw,这意味着Shape类不能直接实例化,且Draw方法没有具体实现。
  • CircleRectangle类继承了Shape类,并提供了Draw方法的具体实现。
  • 通过将shape变量声明为Shape类型,但赋予它CircleRectangle的实例,我们展示了多态的魔力:尽管shape在编译时的类型是Shape,但在运行时它可以根据实际赋值的对象类型调用不同的Draw方法。

结语

好了,亲爱的编程小达人们,今天的面向对象编程三部曲就到这里啦!我们深入探讨了封装、继承与多态的奥秘,并通过示例代码展示了它们在实际编程中的应用。希望这次探险能让你对C#面向对象编程有更深入的理解和掌握。记住哦,编程就像是一场没有终点的旅行,只有不断学习和实践才能发现更多的乐趣和惊喜!加油哦!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号