为了账号安全,请及时绑定邮箱和手机立即绑定

(急)虚方法分发的问题

(急)虚方法分发的问题

人到中年有点甜 2018-12-06 18:41:25
例一:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace VirtualMethod{ class Program { static void Main(string[] args) { Base b1 = new Derived(); b1.Start();//输出什么? b1.Stop();//输出什么? b1.Turn();//输出什么? } } public interface IVehicle { void Start(); void Stop(); void Turn(); } public class Base : IVehicle { public void Start() { Console.WriteLine("a"); } public void Stop() { Console.WriteLine("b"); } public void Turn() { Console.WriteLine("c"); } } public class Derived : Base, IVehicle { void IVehicle.Start() { Console.WriteLine("d"); } public void Stop() { Console.WriteLine("e"); } public void Turn() { Console.WriteLine("f"); } }}例二:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace VirtualMethod{ class Program { static void Main(string[] args) { ReallyDerived r1 = new ReallyDerived(); Derived r2 = r1; Base r3 = r1; ICommon r4 = r1; r1.Doit();//输出什么? r2.Doit();//输出什么? r3.Doit();//输出什么? r4.Doit();//输出什么? } } public interface ICommon { void Doit(); } public class Base : ICommon { void ICommon.Doit() { Console.WriteLine("a"); } public virtual void Doit() { Console.WriteLine("b"); } } public class Derived : Base, ICommon { void ICommon.Doit() { Console.WriteLine("c"); } public new virtual void Doit() { Console.WriteLine("d"); } } public class ReallyDerived : Derived { public override void Doit() { Console.WriteLine("e"); } }} 请问标记为“输出什么?”的各个语句输出什么?请给出原因或分析,谢谢了!
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

1.a,b,c 原因:都是Base类型;

2.e,e,b,c原因:是复写与就近原则

查看完整回答
反对 回复 2019-01-21
  • 1 回答
  • 0 关注
  • 334 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信