【发布时间】:2009-04-21 21:33:21
【问题描述】:
我遇到了泛型和新成员的问题。我编写了一个对 ObjectA 类型的对象进行操作的泛型类。 ObjectB 派生自 ObjectA 并隐藏了一些 ObjectA 的成员。当我将 ObjectB 的类型作为类型参数提供给泛型类时,我希望当我调用任何被 ObjectB 隐藏的成员时,我会调用 ObjectB 的实现。但是,CLR 仍然调用隐藏成员(ObjectA 的实现)。这似乎不合逻辑,因为我明确地将 ObjectB 的类型提供给了泛型类。这是泛型本身的问题,还是我做错了什么?
编辑:不幸的是,我无权访问 ObjectA 的源代码,并且我想要覆盖的成员不是虚拟的。如果我可以访问 ObjectA 的源代码,我会将成员设为虚拟,但由于我不能这样做,我唯一的“覆盖”成员的选择是通过“new”关键字。
class GenericClass<T> where T : ObjectA
{
public void DoWork(T item)
{
// When type parameter 'T' is ObjectB, should get ObjectB's implementation
item.Invoke();
}
}
class ObjectA
{
public void Invoke()
{
// A's implementation...
}
}
class ObjectB : ObjectA
{
public new void Invoke()
{
// B's implementation...
}
}
static void Main()
{
GenericClass<ObjectB> genericClass = new GenericClass<ObjectB>();
ObjectB objectB = new ObjectB();
genericClass.DoWork(objectB);
}
【问题讨论】: