【发布时间】:2015-08-07 10:05:36
【问题描述】:
假设我需要在我的Dictionary<string, string> 中重新定义Add。
解决方案 A:
public class ImplementedDict : IDictionary<string, string>
{
private readonly Dictionary<string, string> _data = new Dictionary<string, string>();
public void Add(string key, string value)
{
_data.Add(key, value);
}
}
解决方案 B:
public class InheritedDict : Dictionary<string, string>
{
public override void Add(string key, string value)
{
base.Add(key, value);
}
}
另一个 StackOverflow 用户告诉我(在另一个线程的 cmets 部分)解决方案 A 是正确的。这与我的预期相反。
显然是因为“Add 不是虚拟方法”。他指给我看文档:https://msdn.microsoft.com/en-us/library/k7z0zy8k(v=vs.110).aspx
我承认我还是不明白。
编辑:所以问题是:为什么解决方案 B 会被认为是坏代码? (抱歉,当我错误地问“为什么解决方案 A 会被视为错误代码?”时,@Backs 的回答是有道理的)
【问题讨论】:
-
还有什么问题?
-
@Backs 抱歉,在帖子中编辑:“所以问题是:为什么解决方案 A 会被视为错误代码?”
-
我相信你会在那篇文章中得到答案。您能否分享指向您所指的 StackOverflow 问题的链接
-
@SriramSakthivel 帖子链接是 stackoverflow.com/questions/31873149/… ,cmets 在 MatíasFidemraizer 的回答下。
-
解决方案 B 甚至无法编译,因为正如您所指出的,Add 不是虚拟的。
标签: c#