我在其中一个项目中抽象出了工厂模式: 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)?
答案 0 :(得分:0)
this
只读。所以你不能分配给它。
答案 1 :(得分:0)
没有演员,你不能演员。工厂的用处来自于xyou 不需要知道返回对象的确切派生类的事实。如果您不使用工厂,而是调用您知道确切类型的构造函数,则会有所不同。
你为什么不这样做:
QuestaoBaseResposta qs = new QuestaoFactory().CreateQuestao();