using System.Collections.Generic;
public static void Main()
var request = RequestFactory.CreateRequest(RequestType.Foo);
public static class RequestFactory
public static IRequest CreateRequest(RequestType requestType)
return requestType switch
RequestType.Foo => new FooRequest(),
RequestType.Bar => new BarRequest()
public interface IRequest
object CommonThing {get;set;}
public class FooRequest : IRequest
public object CommonThing {get;set;}
public object FooThing {get;set;}
public class BarRequest : IRequest
public object CommonThing {get;set;}
public object BarThing {get;set;}