C#实现抽象工厂模式

时间:2010-12-01 16:46:10

标签: c#

我在其中一个项目中抽象出了工厂模式: http://www.dofactory.com/Patterns/PatternAbstract.aspx

代码:

public class QuestaoResposta : QuestaoBaseResposta, IQuestao,IQuestionario
{
    public int IDQuestaoResposta { get; set; }
}

public class QuestaoFactory : QuestoesFactory
{
    public override QuestaoBaseResposta CreateQuestao()
    {
        return new QuestaoResposta();
    }
}

public abstract class QuestoesFactory
{
    public abstract QuestaoBaseResposta CreateQuestao();
}

public class QuestaoBaseResposta : IQuestao, IMarcas, IQuestionario
{
    // Constructor where i want to create a concrete instance 
    // of any class that inherits QuestaoBaseResposta using QuestoesFactory 
    // abstract class, and assign it to current instance of
    // QuestaoBaseResposta class
    public QuestaoBaseResposta(QuestoesFactory qf)
    {
        this = qf.CreateQuestao();
    }
}

问题是我无法使用“THIS”关键字为当前类赋值。

示例:

QuestaoBaseResposta qs = new QuestaoBaseResposta(new QuestaoFactory());

// Here i want the qs intance to be type of QuestaoResposta
// since im passing QuestaoFactory as argument,without cast anything.
qs.IDQuestaoResposta = 0;

在没有强制转换的情况下,您建议将QuestaoBaseResposta类强制转换为继承类型(QuestaoResposta)?

2 个答案:

答案 0 :(得分:0)

this只读。所以你不能分配给它。

答案 1 :(得分:0)

没有演员,你不能演员。工厂的用处来自于xyou 需要知道返回对象的确切派生类的事实。如果您不使用工厂,而是调用您知道确切类型的构造函数,则会有所不同。

你为什么不这样做:

QuestaoBaseResposta qs = new QuestaoFactory().CreateQuestao();