C#-多态

  • C#-多态已关闭评论
  • 195 次浏览
  • A+
所属分类:.NET技术
摘要

多态静态多态性,重载同一个方法中有多个相同名称的方法,但参数不一样。
在编译阶段(程序未运行的时候),函数之间就产生了一对一的关系。
减少函数的命名,多个相同的函数可以使用相同的命名。

多态

静态多态性,重载

同一个方法中有多个相同名称的方法,但参数不一样。
在编译阶段(程序未运行的时候),函数之间就产生了一对一的关系。
减少函数的命名,多个相同的函数可以使用相同的命名。

Mathf f = new Mathf(); f.Add(10001);  class Mathf {     public void Add(float a) {              }      public void Add(float a, float b) {              } } 

动态多态性 重写

父类使用 virtual 形成虚方法,子类使用override冲洗对父类的方法进行重写。

Animal a = new BigGoose(); a.Run();// 调用的是BigGoose下的Run函数   Animal b = new TheGiantPanda(); b.Run();// 调用的是Animail下的Run函数 ((TheGiantPanda)b).Run();// 调用的是TheGianPanda下的Run函数。  // 父类动物 class Animal {     public virtual void Run() {         Console.WriteLine("父类的逻辑");     } }  class BigGoose :Animal {     // 没有对Run进行重写,使用服了的Run逻辑。 }  class People : Animal {     public override void Run() {         Console.WriteLine("");// 对父类的Run进行重写,使用自己的逻辑。     } }  class ChineseAlligator:Animal {     public override void Run() {         base.Run();         Console.WriteLine("自己的逻辑");// 同时使用父类和自己的逻辑。     } }  class TheGiantPanda:Animal {     public new void Run() {         Console.WriteLine("重定义");// 通过New关键字使Run方法实现重定义,当类型为父类调用父类的Run函数,当类型为子类的时候调用的是子类的Run函数。可以在调用前先将类型进行转换。     } } 

抽象类

抽象类不能进行 New (不能进行实现)。
Window w = new Window();因为是抽象类故不被允许。
Window w1 = new Login();可以进行创建,因为创建的具体实例是Login。

abstract class Window {     // 抽象方法只能存在抽象类中     public abstract void Open();     public abstract void Close();     // 一般方法也可以存在抽象类中     public void Refresh() {         Console.WriteLine("刷新");     } }  class Login : Window {     // 继承抽象类必须要实现对应的抽象方法     public override void Close() {         Console.WriteLine("登录界面打开");     }      public override void Open() {         Console.WriteLine("登录界面关闭");         } } 

抽象类主要用于程序框架,通常是主程序考虑抽象概念。