基接口,基类、子类在调用时的一个有趣现象

刚才调试了一个程序问题,发现在继承方面有个现象比较好玩,

程序是这样的:

1。我有一个类DictionaryExt<TKey,TValue>:Dictionary<TKey,TValue>

2。另外,我改写了一个方法ContainsKey(Key)

public class DictionaryExt<TValue> : DictionaryExt<string, TValue>

{

  public new bool ContainsKey(string key)
  {
  return base.ContainsKey(key.ToLower());
  }

}

3。在一个程序中,

publish void 设置值()

{

  DictionaryExt<string, object> dict=new DictionaryExt<string, object>();

 dict.Add("abc",100);

  SetValue( (IDictionary<string, object>)dict);

 

}

private static void SetValue( IDictionary<string, object> dict)

{

  string myKey="ABC";

// 传入的dict参数有一个记录是:

//dict["abc"]=100;

i
  if (dict.ContainsKey(myKey)) //关键:判断是否存在
  {
  messageBox.Show("OK");
  }

else

{messageBox.Show("Not Found");}

}

 

奇怪的现象是, 判断语句始终都是返回false的。

 

 解决方法:

把1。类的继承方式修改了一下:

public class DictionaryExt<TValue> : DictionaryExt<string, TValue>,IDictionaryExt<string, TValue>

{

  public new bool ContainsKey(string key)
  {
  return base.ContainsKey(key.ToLower());
  }

}

 

然后再运行,程序就没有问题了。

-------------------------------------------

问题总结: 估计是在继承中,调用程序是IDictionary,而自定义类DictionaryExt没有直接继承IDictionary接口,而Dictionary直接继承了IDictionary,所以,在调用时,只会调用Dictionary的方法,而不会调用DictionaryExt的同名方法。

而后来,让DictionaryExt也直接继承IDictionary接口,所以,系统直接先找DictionaryExt的方法执行,而不会直接找基类Dictionary 的方法了。

所以,这种情况是需要小心 处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值