C# heritage : Call child method from parent method called by child
我在这里面临一个问题,假设我有一个父类:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class ParentClass { public void MethodA() { //Do stuff MethodB(); } public void MethodB() { //Do stuff } } |
继承ParentClass并重写methodB()的子类:
1 2 3 4 5 6 7 |
现在,如果我从ChildClass对象调用methoda()。
1 2 3 4 5 |
如何确保将调用的methodb()将是子类中的方法?
如果您通过使方法在父类中成为虚拟的,并通过向子类中的方法添加返回值来修复编译错误,那么它将正常工作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class ParentClass { … public virtual void MethodB() { //Do stuff } } class ChildClass : ParentClass { public override void MethodB() { //Do stuff } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | using System; namespace ConsoleApplication6 { class Program { static void Main(string[] args) { var childObject = new ChildClass(); childObject.MethodA(); childObject.MethodB(); childObject.MethodC(); Console.ReadLine(); } } class ParentClass { public void MethodA() { //Do stuff _MethodB(); } private void _MethodB() { Console.WriteLine("[B] I am called from parent."); } public virtual void MethodB() { _MethodB(); } public void MethodC() { Console.WriteLine("[C] I am called from parent."); } } class ChildClass : ParentClass { public override void MethodB() { Console.WriteLine("[B] I am called from chield."); } public new void MethodC() { Console.WriteLine("[C] I am called from chield."); } } } |