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

文章目录

      • 封装 (Encapsulation)
      • 继承 (Inheritance)
      • 多态 (Polymorphism)

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)
————————————————

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

你可能感兴趣的:(c#,unity,游戏引擎)