using System;
using System.Collections.Generic;
using System.Linq;
class MyBaseClass {}
class DerivedClassOne : MyBaseClass {}
class DerivedClassTwo : MyBaseClass {}
public class Test
{
public enum Option {
Option1,
Option2,
Option3
}
private static Dictionary<Option, Func<MyBaseClass>> OptionMapping
= new Dictionary<Option, Func<MyBaseClass>> {
{ Option.Option1, () => new DerivedClassOne() },
{ Option.Option2, () => new DerivedClassTwo() },
{ Option.Option3, () => OptionMapping[Option.Option2]() }
};
public static void Main()
{
// your code goes here
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpjbGFzcyBNeUJhc2VDbGFzcyB7fQpjbGFzcyBEZXJpdmVkQ2xhc3NPbmUgOiBNeUJhc2VDbGFzcyB7fQpjbGFzcyBEZXJpdmVkQ2xhc3NUd28gOiBNeUJhc2VDbGFzcyB7fQoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIGVudW0gT3B0aW9uIHsKICAgICAgICBPcHRpb24xLAogICAgICAgIE9wdGlvbjIsCiAgICAgICAgT3B0aW9uMwogICAgfQoJcHJpdmF0ZSBzdGF0aWMgRGljdGlvbmFyeTxPcHRpb24sIEZ1bmM8TXlCYXNlQ2xhc3M+PiBPcHRpb25NYXBwaW5nIAogICAgICAgPSBuZXcgRGljdGlvbmFyeTxPcHRpb24sIEZ1bmM8TXlCYXNlQ2xhc3M+PiB7CiAgICAgICAgeyBPcHRpb24uT3B0aW9uMSwgKCkgPT4gbmV3IERlcml2ZWRDbGFzc09uZSgpIH0sCiAgICAgICAgeyBPcHRpb24uT3B0aW9uMiwgKCkgPT4gbmV3IERlcml2ZWRDbGFzc1R3bygpIH0sCiAgICAgICAgeyBPcHRpb24uT3B0aW9uMywgKCkgPT4gT3B0aW9uTWFwcGluZ1tPcHRpb24uT3B0aW9uMl0oKSB9CiAgICB9OwoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCX0KfQ==