2010-12-01 6 views
0

필자 추상 팩토리 패턴 : http://www.dofactory.com/Patterns/PatternAbstract.aspxC# 구현 추상 팩토리 패턴 내 프로젝트 중 하나에

코드 :

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(); 
    } 
} 

문제는 내가 "이"키워드를 사용하여 현재 클래스에 값을 assing 캔트 것입니다.

예 :

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; 

당신이 캐스팅없이, 상속 형 (QuestaoResposta)에 QuestaoBaseResposta 클래스를 캐스팅 어떤 제안?

+1

, 당신은 this''에 할당 할 수 없습니다를 – Will

답변

0

아니요. 캐스트하지 않고는 캐스트 할 수 없습니다. 팩토리의 유용성은 xyou가 이 아니라이 반환 된 객체의 정확한 파생 클래스를 알아야한다는 사실에서 비롯됩니다. 팩토리를 사용하지 않고 정확한 유형을 알고있는 생성자를 호출하는 경우와는 다릅니다.

왜 당신은 이런 식으로하지 않는다 : 내가 틀리지 않는

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

this이 읽기 ​​전용입니다. 그래서 당신은 그것에 할당 할 수 없습니다.