簡體   English   中英

C#實現抽象工廠模式

[英]C# Implementing Abstract factory pattern

我的一個項目中的Ive抽象工廠模式: 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),而不進行轉換?

this是只讀的。 因此,您無法分配給它。

不,沒有鑄就不能投。 工廠的有效性來自於事實,xyou 並不需要知道確切的派生類返回的對象的。 如果您不使用工廠,而是在知道確切類型的地方調用構造函數,則情況有所不同。

您為什么不這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM