【发布时间】:2013-03-01 17:37:16
【问题描述】:
这些关键词有很多问题;我筛选了前 30 个左右,然后放弃了。
我有这样的接口:
public interface IColumnRule
{
int Length { get; set; }
string Name { get; set; }
object Parse(string toParse);
int Position { get; set; }
Type Type { get; }
}
public interface IColumnRule<T> : IColumnRule
{
ColumnRule<T>.RuleFluentInterface<T> Configure { get; }
new T Parse(string rowdata);
Func<string, T> ParsingFunction { get; set; }
}
...这个想法是,可以实现IColumnRule<T> 来创建一个使用Func<string, T> 的强类型列解析器。
问题是,我将这些IColumnRule<T> 混凝土存储在IList<IColumnRule> 容器中。 IColumnRule<T> 有多种类型,每种都在不同的类型上实现。当我在IColumnRule 接口上调用Parse 方法时,我期望调用子类的new Parse(string) 方法,但实际上调用的是基类Parse。
如何使用接口的object Parse(string) 从IColumnRule 的集合中调用子类泛型T Parse(string) 方法...或者这是不可能的?
【问题讨论】:
-
这是您在声明
new函数时得到的明确行为。见here。 -
几分钟前您的问题中有您的实施细节,但删除了它们。这有助于解释您遇到问题的原因。我已经用更详细的解决方案更新了我的答案,应该会对您有所帮助。
-
@p.s.w.g 是的,我认为这是太多的信息,并且会成为 TL;DR 有点像。你的答案就是我想要的;谢谢。
标签: c# generics inheritance overriding