unity C#中的封装、继承和多态简单易懂的经典实例


C#中的封装、继承和多态是面向对象编程(OOP)的三大核心特性。下面分别对这三个概念进行深入解释,并通过实例来说明它们在实际开发中的应用。

封装 (Encapsulation)

实例1:

public class BankAccount
{
    private decimal balance; // 私有变量,封装内部状态

    public BankAccount(decimal initialBalance)
    {
        this.balance = initialBalance;
    }

    // 公共方法,提供访问私有数据的受控方式
    public decimal GetBalance()
    {
        return balance;
    }

    public void Deposit(decimal amount)
    {
        if (amount > 0)
            balance += amount;
    }

    public void Withdraw(decimal amount)
    {
        if (amount > 0 && amount <= balance)
            balance -= amount;
    }
}

在这个例子中,BankAccount 类封装了账户余额(balance),外部不能直接修改它,只能通过 DepositWithdraw 方法来进行操作,这样保证了数据的安全性和完整性。

继承 (Inheritance)

实例2:

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

    public virtual void Eat()
    {
        Console.WriteLine("动物正在吃东西...");
    }
}

public class Dog : Animal
{
    public bool IsTrained { get; set; }

    // 重写父类方法以提供更具体的行为
    public override void Eat()
    {
        Console.WriteLine("狗狗正在吃狗粮...");
    }

    public void Bark()
    {
        Console.WriteLine("狗狗在叫!");
    }
}

// 使用示例:
Dog myDog = new Dog() { Name = "小黑", Age = 3, IsTrained = true };
myDog.Eat(); // 输出 "狗狗正在吃狗粮..."
myDog.Bark(); // 输出 "狗狗在叫!"

在这里,Dog 类从 Animal 类继承而来,继承了其属性并重写了 Eat 方法,同时添加了一个独有的 Bark 方法,体现了“继承”带来的代码复用和扩展性。

多态 (Polymorphism)

实例3:

public abstract class Shape
{
    public abstract double Area();
}

public class Circle : Shape
{
    public double Radius { get; set; }

    public override double Area()
    {
        return Math.PI * Radius * Radius;
    }
}

public class Square : Shape
{
    public double Side { get; set; }

    public override double Area()
    {
        return Side * Side;
    }
}

public static class Program
{
    public static void DisplayArea(Shape[] shapes)
    {
        foreach (var shape in shapes)
        {
            Console.WriteLine($"形状的面积为: {shape.Area()}");
        }
    }

    public static void Main()
    {
        var circle = new Circle() { Radius = 5 };
        var square = new Square() { Side = 10 };

        Shape[] shapes = { circle, square };
        DisplayArea(shapes); // 输出不同形状的具体面积
    }
}

此例中,CircleSquare 都是从抽象基类 Shape 派生出来的,它们都实现了 Area 抽象方法。在 DisplayArea 函数中,通过 Shape 类型的数组可以容纳不同类型的形状对象,这是多态性的体现,即同一接口(Area 方法)下不同的实现。

实例4(接口实现多态):

public interface IRunnable
{
    void Run();
}

public class Car : IRunnable
{
    public void Run()
    {
        Console.WriteLine("汽车正在行驶...");
    }
}

public class Airplane : IRunnable
{
    public void Run()
    {
        Console.WriteLine("飞机正在飞行...");
    }
}

public static class Program
{
    public static void MakeRun(IRunnable vehicle)
    {
        vehicle.Run();
    }

    public static void Main()
    {
        Car car = new Car();
        Airplane airplane = new Airplane();

        MakeRun(car); // 输出 "汽车正在行驶..."
        MakeRun(airplane); // 输出 "飞机正在飞行..."
    }
}

这里展示了通过接口实现多态的例子。IRunnable 接口定义了一个通用行为 Run,尽管 CarAirplane 的运行方式完全不同,但都可以实现这个接口,从而使得 MakeRun 方法能够处理任何实现了 IRunnable 的对象。

实例5(虚方法与动态绑定):

public class BaseClass
{
    public virtual void ShowMessage()
    {
        Console.WriteLine("这是基础类的消息");
    }
}

public class DerivedClass : BaseClass
{
    public override void ShowMessage()
    {
        Console.WriteLine("这是派生类的消息");
    }
}

public static class Program
{
    public static void DisplayMessage(BaseClass obj)
    {
        obj.ShowMessage();
    }

    public static void Main()
    {
        BaseClass baseObj = new BaseClass();
        DerivedClass derivedObj = new DerivedClass();

        DisplayMessage(baseObj); // 输出 "这是基础类的消息"
        DisplayMessage(derivedObj); // 输出 "这是派生类的消息",尽管传入的是基类引用
    }
}

这个例子展示了动态多态性,即使通过基类类型引用调用虚方法时,也会根据实际的对象类型调用对应的重写方法。这就是多态的一个重要方面,称为运行时多态或动态绑定。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

  • 27
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity是一款全球流行的游戏引擎,支持面向对象编程,并且提供了封装继承多态等面向对象编程的特性。下面具体介绍Unity这些特性的用法: 封装封装是指将对象的属性和方法进行保护,使得它们不能被外部直接访问和修改。在Unity,可以使用访问修饰符public、private、protected来实现封装。例如,可以将脚本的变量设置为private,只能在脚本访问,或者将方法设置为public,方便其他脚本访问。 继承继承是指从一个类派生出一个新的类,新的类可以继承原有类的属性和方法,并且还可以添加自己的属性和方法。在Unity,可以使用关键字class来定义一个类,使用冒号来表示继承关系。例如,可以定义一个基础的Enemy类,然后再定义几个不同的敌人类型,这些类型可以继承于Enemy类,共享Enemy类的属性和方法。 多态多态是指同一种类型的对象,在不同的情况下会表现出不同的行为。在Unity多态可以通过虚函数和抽象类来实现。虚函数可以在基类定义,并在派生类重写,从而达到不同的行为。抽象类是一种特殊的类,用于定义一些方法,但是这些方法没有具体的实现,需要在派生类实现。例如,可以定义一个抽象的Weapon类,其包含攻击方法attack(),然后派生出几个不同的武器类型,每种武器类型都需要实现自己的attack()方法,从而达到不同的攻击效果。 综上所述,Unity封装继承多态是面向对象编程的重要特性,在游戏开发可以帮助我们更好地管理代码,提高代码的复用性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极致人生-010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值