在C#中方法参数存在继承关系会构成方法重载,参考以下代码
1 class Parent 2 { 3 public void SetName(HashMap map) 4 { 5 Console.WriteLine("父类方法"); 6 } 7 } 8 class Children : Parent 9 { 10 public void SetName(Map map) 11 { 12 Console.WriteLine("子类方法"); 13 } 14 } 15 class Map 16 { 17 } 18 class HashMap : Map 19 { 20 }
在Main方法中如下调用:
1 Children p = new Children(); 2 HashMap map = new HashMap(); 3 p.SetName(map);
按理说应该会调用父类的SetName方法,但是运行之后发现会调用子类的SetName方法,输出"子类方法",这样的话感觉会出问题,求大神指点
你先弄明白一个关键词:方法签名,当签名一致时编译器才认为他是同一个方法.
这两个方法的名称是一致的,因为参数不同,所以是重载关系
@hebutyll: 是啊.重载的方法是2个方法.你硬要觉得他是一个方法.是因为你没弄清楚怎么样才算是一个方法.
你个根本和继承里氏替换没关系.就是直接调用了子类中定义的一个新方法而已.
你搞晕了把,怎么按理说都是调用子类的方法,父类的不调用的,你晕了把
父类方法需要显性调用的,代码如下:
class Children : Parent
{
public void SetName(Map map)
{
base.SetName(map as HashMap);
System.Diagnostics.Debug.WriteLine("子类方法");
}
}
输出结果:
父类方法
子类方法