我有一个通用方法:
public bool DoSomething<T>(T item) where T: IBase
{
return DoSomethingSpecific(item);
}
public bool DoSomethingSpecific(IBase item)
{
return true;
}
public bool DoSomethingSpecific(IAdvanced item)
{
return false;
}
请注意,IAdvanced 接口从 IBase 接口派生/继承。
我发现如果我在项目类型为 IAdvanced 的情况下调用 DoSomething,它仍然总是返回 false。我不明白这一点。我知道,由于 IAdvanced 是 IBase 类型(因为它是该接口的子接口),它可能会导致 DoSomethingSpecific 方法的 2 种重载类型之间的混淆。但是,据我所知,我的 C# 知识有限,这里应该选择 IAdvanced 方法。这是我如何得出这个结论的一个例子:
public class Advanced: IAdvanced
{
public void CallMethod()
{
DoSomething(this);
}
}
这会产生一个真值。
但是,如果我这样做:
public class Advanced: IAdvanced
{
public void CallMethod()
{
DoSomethingSpecific(this);
}
}
它返回 false,这是我所期望的。
我不得不说我以前从未使用过泛型。虽然我尝试过,但总是陷入这样的情况,然后完全看不到使用泛型的意义(除了树和链表等数据结构)。
这次我决定来这里寻求一些建议。我正在尝试做的事情有明显的问题吗?尝试做我在这里忙着做的事情可能没有意义吗?