C#多态

C#多态性深入解析

C#多态本质重载,一个方法实现不同的功能,分为静态多态和动态多态

一、静态多态(包括对方法重装和对操作符重载)

1.1 对方法重载

private static void SayHello()
        {
            Console.WriteLine("hello!");
        }

        private static void SayHello(string name)
        {
            Console.WriteLine(name + " say hello!");
        }

调用:

SayHello();
SayHello("mr.tian");

对运算符重载

class Complex
        {
            public Complex()
            {
                
            }
            public Complex(int i)
            {
                Num = i;
            }
            public int Num { get; set; }

            public static Complex operator +(Complex com1, Complex com2)
            {
                Complex result = new Complex();
                result.Num = com1.Num + com2.Num;
                return result;
            }
        }
调用:

Complex test1 = new Complex(5);
Complex test2 = new Complex(10);
Complex test3 = test1 + test2;
Console.WriteLine(test3.Num);

结果:

提供了一个基于51单片机的RFID门禁系统的完整资源文件,包括PCB图、原理图、论文以及源程序。该系统设计由单片机、RFID-RC522频射卡模块、LCD显示、灯控电路、蜂鸣器报警电路、存储模块和按键组成。系统支持通过密码和刷卡两种方式进行门禁控制,灯亮表示开门成功,蜂鸣器响表示开门失败。 资源内容 PCB图:包含系统的PCB设计图,方便用户进行硬件电路的制作和调试。 原理图:详细展示了系统的电路连接和模块布局,帮助用户理解系统的工作原理。 论文:提供了系统的详细设计思路、实现方法以及测试结果,适合学习和研究使用。 源程序:包含系统的全部源代码,用户可以根据需要进行修改和优化。 系统功能 刷卡开门:用户可以通过刷RFID卡进行门禁控制,系统会自动识别卡片并判断是否允许开门。 密码开门:用户可以通过输入预设密码进行门禁控制,系统会验证密码的正确性。 状态显示:系统通过LCD显示屏显示当前状态,如刷卡成功、密码错误等。 灯光提示:灯亮表示开门成功,灯灭表示开门失败或未操作。 蜂鸣器报警:当刷卡或密码输入错误时,蜂鸣器会发出报警声,提示用户操作失败。 适用人群 电子工程、自动化等相关专业的学生和研究人员。 对单片机和RFID技术感兴趣的爱好者。 需要开发类似门禁系统的工程师和开发者。
C# 中,**多态(Polymorphism)** 是面向对象编程的核心特性之一,它允许不同的类以统一的方式处理相同的消息或方法调用,从而实现灵活、可扩展的代码结构。多态的核心在于“一个接口,种实现”。 ### 多态的基本概念 多态是指一个对象在不同情境下表现出不同的行为。具体来说: - 多态允许子类对父类的方法进行重写(Override),从而提供不同的实现方式。 - 程序在运行时会根据对象的实际类型来决定调用哪个方法,而不是根据变量的声明类型。 - 多态性提高了代码的可维护性和可扩展性,因为可以通过基类的引用调用派生类的方法,而无需修改现有代码。 ### 多态的实现方式 C#多态的实现主要有以下几种形式: 1. **虚方法(Virtual Methods)** - 在基类中使用 `virtual` 关键字声明方法。 - 派生类使用 `override` 关键字重写该方法。 - 在运行时,根据对象的实际类型决定调用哪个方法。 2. **抽象类与抽象方法(Abstract Classes and Methods)** - 抽象类不能被实例化,只能作为基类。 - 抽象方法没有实现,必须在派生类中重写。 - 抽象类和抽象方法是实现多态的一种强制手段。 3. **接口(Interfaces)** - 接口定义了一组方法和属性的契约。 - 个类可以实现同一个接口,并提供自己的具体实现。 - 接口支持重继承,适合实现跨类别的多态行为。 ### 示例:使用虚方法实现多态 以下是一个典型的多态示例,通过虚方法实现: ```csharp using System; namespace PolymorphismExample { class Program { static void Main(string[] args) { Person st = new Student("李雷"); Person th = new Teacher("井边君"); Person[] people = { st, th }; foreach (var person in people) { person.SayHello(); // 根据实际对象类型调用相应的方法 } Console.ReadKey(); } } class Person { public Person(string name) { this.Name = name; } public string Name { get; set; } public virtual void SayHello() { Console.WriteLine("我是父类的方法"); } } class Student : Person { public Student(string name) : base(name) { } public override void SayHello() { Console.WriteLine("我叫{0}, 我是学生", this.Name); } } class Teacher : Person { public Teacher(string name) : base(name) { } public override void SayHello() { Console.WriteLine("我叫{0}, 我是老师", this.Name); } } } ``` ### 示例:使用抽象类实现多态 ```csharp using System; abstract class Animal { public abstract void MakeSound(); } class Cat : Animal { public override void MakeSound() { Console.WriteLine("猫叫:喵喵喵"); } } class Dog : Animal { public override void MakeSound() { Console.WriteLine("狗叫:汪汪汪"); } } class Program { static void Main() { Animal myCat = new Cat(); Animal myDog = new Dog(); myCat.MakeSound(); // 输出:猫叫:喵喵喵 myDog.MakeSound(); // 输出:狗叫:汪汪汪 } } ``` ### 示例:使用接口实现多态 ```csharp using System; interface IAnimal { void MakeSound(); } class Cat : IAnimal { public void MakeSound() { Console.WriteLine("猫叫:喵喵喵"); } } class Dog : IAnimal { public void MakeSound() { Console.WriteLine("狗叫:汪汪汪"); } } class Program { static void Main() { IAnimal myCat = new Cat(); IAnimal myDog = new Dog(); myCat.MakeSound(); // 输出:猫叫:喵喵喵 myDog.MakeSound(); // 输出:狗叫:汪汪汪 } } ``` ### 多态的应用场景 1. **统一接口处理不同对象** - 多态允许使用统一的接口处理不同类型的对象,简化代码逻辑。 2. **提高代码的可扩展性** - 新增功能时无需修改已有代码,只需扩展新的子类。 3. **支持运行时动态绑定** - 在运行时根据对象的实际类型调用相应的方法,提升程序的灵活性。 ### 总结 多态C# 面向对象编程的重要特性,通过虚方法、抽象类和接口,可以实现灵活的代码结构和良好的扩展性。上述示例展示了如何通过不同方式实现多态,并展示了其在实际开发中的应用价值[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值