我在很多地方看到过以下模式:
abstract class SimpleProvider<T>
{
public object Create(IContext context)
{
return CreateInstance(context);
}
protected abstract T CreateInstance(IContext context);
}
我不明白实际的区别,为什么不直接写成:
abstract class SimpleProvider<T>
{
public abstract T Create(IContext context);
}
更新:以上片段取自 Ninject
的文档没有指定接口(interface),但查看实际源代码我可以看到 SimpleProvider<T>
实现接口(interface) IProvider
这解释了子调用的必要性并回答了我的问题。
最佳答案
所以唯一的区别是返回类型(Object 而不是 T),这意味着调用者需要强制转换。
我能想到这样做的唯一原因是,如果它们实现了一个具有 object Create(IContext context);
关于c# - 使用抽象方法时请解释这种模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6225657/