首页新闻找找看学习计划

C#中关于方法参数存在继承关系的时候的问题

0
[待解决问题]

在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的主页 hebutyll | 菜鸟二级 | 园豆:202
提问于:2016-07-06 10:03
< >
分享
所有回答(3)
0

你先弄明白一个关键词:方法签名,当签名一致时编译器才认为他是同一个方法.

吴瑞祥 | 园豆:28729 (高人七级) | 2016-07-06 10:54

这两个方法的名称是一致的,因为参数不同,所以是重载关系

支持(0) 反对(0) hebutyll | 园豆:202 (菜鸟二级) | 2016-07-06 11:23

@hebutyll: 是啊.重载的方法是2个方法.你硬要觉得他是一个方法.是因为你没弄清楚怎么样才算是一个方法.

你个根本和继承里氏替换没关系.就是直接调用了子类中定义的一个新方法而已.

支持(0) 反对(0) 吴瑞祥 | 园豆:28729 (高人七级) | 2016-07-06 11:32
1

你搞晕了把,怎么按理说都是调用子类的方法,父类的不调用的,你晕了把

 

代码小兵的成长 | 园豆:301 (菜鸟二级) | 2016-07-06 11:31
0

父类方法需要显性调用的,代码如下:

class Children : Parent
{
public void SetName(Map map)
{
base.SetName(map as HashMap);
System.Diagnostics.Debug.WriteLine("子类方法");
}
}

输出结果:

父类方法

子类方法

 

金钱 | 园豆:136 (初学一级) | 2016-07-06 13:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册