C#多态1:重写父类方法2:多态实现3:里氏转换原则4:Object类 1:重写父类方法 1:重写父类方法 父类方法:virtual 子类方法:override 示例: static void Main(string[] args) { Dog a1 = new Dog (); a1.Shot(); Console.ReadKey(); } class Animal//父类方法 { public virtual void C#中的多态是面向对象编程的一个核心特性,它允许我们使用父类类型的引用来调用子类的方法或属性,从而实现代码的灵活性和可扩展性。以下将详细阐述多态的几个关键概念: 1. **重写父类方法** 在C#中,如果父类中的某个方法被声明为`virtual`,则子类可以使用`override`关键字来重写这个方法。这样,当使用父类引用指向子类对象并调用该方法时,实际执行的是子类的版本。例如: ```csharp class Animal { public virtual void Shot() { Console.WriteLine("动物可以叫!"); } } class Dog : Animal { public override void Shot() { Console.WriteLine("狗可以叫!"); } } ``` 在上面的代码中,`Dog`类重写了`Animal`类的`Shot`方法,当使用`Dog`对象调用`Shot`方法时,会输出"狗可以叫!"。 2. **多态实现** 多态实现的目的是使代码更加灵活,可以处理多种类型的对象。例如,可以创建一个父类类型的变量,然后将其赋值为子类的对象,调用的方法会根据实际的对象类型执行相应的行为。下面的代码展示了这种多态性: ```csharp class A { public virtual void Print() { Console.WriteLine("父类输出:A"); } } class B : A { public override void Print() { Console.WriteLine("子类输出:B"); } } ``` 当使用`A`类型的变量`a1`调用`Print`方法时,如果`a1`实际是`B`类型的实例,那么将执行`B`类的`Print`方法。 3. **里氏转换原则** 里氏转换原则指出,任何基类类型的引用都可以指向其实例,或者任何派生类的对象。这意味着你可以将子类对象赋值给父类变量,但不能反过来。例如: ```csharp class Animal { public virtual void Shout() { Console.WriteLine("动物有自己的叫声!"); } } class Dog : Animal { public override void Shout() { Console.WriteLine("小狗:旺旺..."); } } ``` 这里的`Animal a1 = new Dog();`就是遵循了里氏转换原则,可以调用`Dog`的`Shout`方法。然而,父类类型无法直接赋值给子类,因为不是所有父类都是子类的实例。 4. **强制类型转换与is/as操作** - 强制类型转换 `(Dog)a` 可以将父类类型的`a`转换为子类`Dog`,但需要注意如果`a`实际上不是`Dog`类型的实例,这将导致运行时错误。 - 使用 `is` 关键字可以检查对象是否为特定类型,返回一个布尔值,如 `result = a is Dog;` - 使用 `as` 关键字可以安全地尝试将对象转换为指定类型,并在失败时返回`null`,如 `Dog dog = a as Dog;` 总结来说,C#的多态性提供了灵活性,使得代码能够处理不同类型的对象,通过重写和继承机制,子类可以扩展和修改父类的行为。里氏转换原则确保了子类对象可以被视为父类,而`is`和`as`操作则提供了安全检查和转换机制。这些概念在实际开发中经常被用来构建可扩展和模块化的软件系统。
- 粉丝: 6
- 资源: 938
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Visual-Basic基础语法-常规 Visual Basic 代码的词法规则指南
- 基于Springboot+Vue+Mysql 实现的旅游网站毕业设计
- Rust语言的关键特性和应用领域介绍-安全性的系统级编程工具
- Delphi 12 控件之FMXLinuxPackageDownload-120.zip
- Delphi-数组定义及代码实现-Delphi数组定义及初始化详解
- JavaScript编程规范详述与指南-JavaScript编程的基础指导方针和技术规范
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明详细注释(高分项目)
- 基于Springboot+Vue+Mysql入校申报审批系统的设计与实现毕业设计
- Delphi 12 控件之internet-download-manager-6.42.22.rar
- 基于Springboot+Vue+Mysql 实现的老年人体检管理系统毕业设计