建设网站的公司济南兴田德润o评价,合肥市城乡建设局网站首页,加强经管学院网站建设,四川做网站的公司在面向对象编程中继承性和多态性是重要机制#xff0c;前面我为大家分享了我对“类的继承”的理解#xff0c;哪么今天我就跟大家分享下我对“多态性(C#)”的理解。 首先我们先来看看多态的定义#xff0c;同一操作作用于不同的对象#xff0c;可以有不同的解释#xff0c… 在面向对象编程中继承性和多态性是重要机制前面我为大家分享了我对“类的继承”的理解哪么今天我就跟大家分享下我对“多态性(C#)”的理解。 首先我们先来看看多态的定义同一操作作用于不同的对象可以有不同的解释产生不同的执行结果。 C#中多态分为两种形式一种是编译的多态一种是运行的多态而所涉及到多态的有重载、重写、虚方法、抽象方法和隐藏方法。 下面来看看这一段代码我们从代码中来分析他们的概念及区别 public abstract class A { public abstract void prind(); } public class B:A { public override void prind() { Console.WriteLine(我是B类我重写了A类的抽象方法prind()); } public virtual void Bprind() { Console.WriteLine(我是B类中的虚方法我可以被继承B类的派生类重写); } public void Nprind() { Console.WriteLine(Nprind); } } public class CB { public override Bprind() { Console.WriteLine(我重写了B类的虚方法Bprind); } new public void Nprind() { Console.WriteLine(我是隐藏Nprind); } /* 下面是另一种隐藏方法的表现形式 public new void Nprind() { Console.WriteLine(我是隐藏Nprind); } */ public void Cprind() { Console.WriteLine(我是Cprind方法); } public void Cprind(string str) { Console.WriteLine(str我被重载了); } } class D { static void Main(string []arge) { B bnew B(); B bcnew C(); C cnew C(); //重写抽象方法 b.prind(); //重写虚方法 b.Bprind(); bc.Bprind(); //隐藏方法 b.Nprind(); bc.Nprind(); c.Nprind(); //重载 bc.Cprind(); bc.Cprind(E); Console.Read(); } } 输出结果 我是B类我重写了A类的抽象方法prind() 我是B类中的虚方法我可以被继承B类的派生类重写 我重写了B类的虚方法Bprind Nprind Nprind 我是隐藏Nprind 我是Cprind方法 E我被重载了 如果单看这段代码可能会看的很费力所以我们来听听类他们之间的对话。 D:A类因为你是抽象类所以你可以定义抽象方法定义的抽象方法prind可以被继承你的子类重写因此B类可以重写你的抽象方法prind。 A:我可以被继承我的子类B重写哪么我也可以被其他的子类重写咯也就是说我使用了多态性。 D:是的你使用了多态性中涉及的抽象方法因为你的所有子类都可以对你的抽象方法重写所以你符合了多态性的定义但你的所有子类都要注意重写你的抽象方法必须要用到override关键字、修饰符要相同、传递的参数个数和类型也都要一样及方法的返回值都要一样。 D:B类你自身的Bprind方法是虚方法也可以被继承你的子类重写不过你和A类不同的是你自身也可以调用这个虚方法。 B:为什么Bprind会是虚方法呢它和别的方法也没什么不同啊只是多了个virtual关键字而已难道加了virtual关键字的就是虚方法 D:对的虚方法就是必须要加上virtual关键字而没有加virtual或别的关键字的我们叫它为非虚方法也是因为是虚方法才可以重写非虚方法是不能重写的但要注意只有继承你的子类才可以重写你的虚方法。 B:哦所以C类可以重写我的Bprind这个虚方法。 D:C类你不但重写了父类B的虚方法还把B类中的Nprind方法写在了隐藏方法了而已还对自身的Cprind方法进行了重载。 C:听到你跟A、B类的对话我知道了我是重写了虚方法但这个隐藏方法和重载了Cprind方法又是什么回事呢 D:隐藏方法和重写方法差不多只是关键字不是override而改成了new还有不同的是new可以在修饰符前或后。而重载是在同一个作用域中使用了相同的方法名修饰符、返回值、参数都可以不相同。 C:隐藏方法我自己能调用吧但如果实例化父类时引用的是我哪么调用的应该是我的还是父类的方法呢 D:隐藏方法你自己可以但只有是对你自己实例时调用的才是你而如果父类实例时引用的是你哪么调用的将是父类的方法。 首先我们先从他们对话和给合代码来看看重载与重写的区别: 重载 重写 修饰符 可以不同 必须相同 参数个数及类型 可以不同 必须相同 返回值 可以不同 必须相同 方法名 必须相同 必须相同 接下来我们来看看抽象方法、隐藏方法、虚方法的注意事项 抽象方法 1.在基类中定义派生类中重写。 2.抽象方法只有在抽象类中才可使用。 3.抽象类不能实例化。 4.必须使用abstract。 隐藏方法 1.派生类中定义的和基类中的某个方法名相同。 2.父类调用父类的方法而子类调用子类的方法。 3.使用new关键字虚方法也能使用。 虚方法 1.在父类中定义的子类可以重写。 2.使用virtual关键字。 注父类自身也可调用。 转载于:https://www.cnblogs.com/ljhboke/p/5047011.html