就C#当中的继承与多态机制进行了下探索,此处主要根据三个关键字进行探讨:
1. abstract
2. virtual
3. new
针对abstract关键字,是抽象之意。用来限定类时,类中的方法,不能有方法体;用来限定方法时,同样也不能有方法体,并且在子类中除非继续使用抽象方法,否则必须完成方法体。
针对virtual关键字,是虚之意。简单的用法是用来指示类中的方法可以被子类的同名方法覆盖或者共存。覆盖时,子类中使用override关键字。共存时,使用new关键字。
针对new关键字,是新之意。在子类方法中的用法是,用以指示子类中与父类存在的同名方法将在方法表中同父类方法共存,并不覆盖父类的同名方法。这样就达到了多态机制下并非一味覆盖的效果。
我们知道对于类的成员变量来说,存于GC堆内,从低到高,存了所有对象的父类,以及再沿继承线向上的所有类的类成员变量,这样的方式,犹如方法表用new关键字构造时的情况。或者说,方法表中的方法,用new关键字声明的时候,其存在形式,就有如子父类的同名成员变量在GC堆里存在的情况一样。
这里举个简单的例子:Chicken : Bird : Animal
以上三类中都有一个成员变量Type,为他们自己的小写类名;都有一个方法,方法名为showType()。
此时,我们用override, override , virtual 三个关键字来分别声明这三个类中的方法。之后我们得到了如下结果:
Animal chicken1 = new Chicken();
Bird chicken2 = new Chicken();
Chicken chicken3 = new Chicken();
&n

本文深入探讨了C#中的继承与多态机制,通过`abstract`、`virtual`和`new`三个关键字解释了类的抽象、方法覆盖与方法共存的概念。讨论了在继承中方法表的变化以及成员变量的隐藏。此外,还涵盖了C#继承的特点,如继承的传递性、方法的覆写、私有成员的继承和`new`关键字在虚方法中的作用。最后提到了封装的重要性和实现方式,以及多态在系统设计中的应用。
最低0.47元/天 解锁文章
1696

被折叠的 条评论
为什么被折叠?



