【发布时间】:2023-03-28 23:47:01
【问题描述】:
我有一个这样的基类:
class FooBase
{
public bool Do(int p) { /* Return stuff. */ }
}
还有一个像这样的子类:
class Foo<T> : FooBase
{
private Dictionary<T, int> Dictionary;
public bool Do(T p)
{
int param;
if (!Dictionary.TryGetValue(p, out param))
return false;
return base.Do(param);
}
}
如果用户创建了一个名为“fooString”的Foo<string>对象,那么他可以同时调用fooString.Do(5)和fooString.Do("test"),但是如果他创建了一个名为“fooInt”的Foo<int>对象,他只能调用Do方法派生类的。不管T 是什么,我更喜欢第二个。
这两个类中的 Do 方法本质上是做同样的事情。派生类中的一个使用给定参数从Dictionary<T, int> 中获取一个整数,并使用它调用基类的 Do 方法。
这就是为什么我想在Foo<T> 中隐藏FooBase 的Do 方法。我怎样才能做到这一点或类似的东西?任何克服这一点的设计建议也很好。
【问题讨论】:
-
你考虑过保护基类的 Do 吗?
-
@Hammerstein - 是的,但我需要公开。基类不是抽象的,Do 方法是它的主要功能,所以它必须是公共的。
-
如果他们做同样的事情,你从隐藏基本方法中得到什么?如果调用另一个变体应该没有什么区别,因为它们做同样的事情。
标签: c# inheritance method-hiding