使用抽象方法时,请解释这个模式。

3

我在很多地方看到过以下模式的使用:

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的文档,没有指定接口,但是查看实际源代码,我可以看到SimpleProvider<T>实现了接口IProvider,这解释了子调用的必要性并回答了我的问题。


公共方法有什么用途吗? - Restuta
5个回答

2

唯一的区别是返回类型(Object而不是T),这意味着调用者需要进行类型转换。

我能想到的唯一原因是,他们正在实现一个具有object Create(IContext context);方法的接口。


2
它为提供程序提供编译时类型安全性,确保它创建的对象是类型T,但允许类与只能使用对象的更通用代码进行接口交互。当与控制反转容器一起使用的工厂对象进行操作时,这是非常常见的。

1
我唯一看到的用途是当SimpleProvider实现带有方法Create(IContext context)的接口时。然后,您可以从不需要知道T的确切类型的类中使用它,这在某些情况下非常重要。

0

如果你所说的一切都是真的,那么没有实际区别,你只是获得了免费的类型安全方法 =)


0

它可以避免调用者在编译时必须知道T的情况。同时,由于公共方法与任何特定子类实现解耦,因此保持了整个类层次结构中接口的一致性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接