我發現很難創建一個工廠方法返回以下基類:C#「類」是一種類型,在給定的上下文中無效時寫的工廠方法與仿製藥
public sealed class ClassA : GeneratedMessage<ClassA, ClassA.Builder>{}
public sealed class ClassB : GeneratedMessage<ClassB, ClassB.Builder>
public abstract class GeneratedMessage<TMessage, TBuilder> : AbstractMessage<TMessage, TBuilder>
where TMessage : GeneratedMessage<TMessage, TBuilder>
where TBuilder : GeneratedBuilder<TMessage, TBuilder>, new()
{
}
public class EventFactory
{
public GeneratedMessage<TMessage, TBuilder> GetEvent<TMessage, TBuilder>(int typeId)
where TMessage : GeneratedMessage<TMessage, TBuilder>
where TBuilder : GeneratedBuilder<TMessage, TBuilder>, new()
{
switch(typeId)
{
case 1:
ClassA
beak;
case 2:
ClassB
}
}
}
如何寫這樣我可以返回ClassA如果1和ClassB如果2?
當我在工廠方法中使用return ClassA或ClassB時,我得到'ClassA是一個類型',它在給定的上下文中無效。
感謝
從您的示例中,您需要返回實例時列出了ClassA和ClassB的類型名稱。你將如何生成實例? (例如「返回新的ClassA();」 – Jacob
,因爲這些類是密封的,我們不能返回新的 –
您可以創建一個密封類的實例,而不是抽象類。密封意味着您不能從類繼承。請參閱:https://msdn.microsoft.com/en-us/library/88c54tsw.aspx – Jacob