using System.Collections.Generic;
class PostResponse : BaseResponse
class PhotoResponse : BaseResponse
interface IBaseRequest<out TReply> where TReply : BaseResponse, new()
class PostRequest : IBaseRequest<PostResponse>
class PhotoRequest : IBaseRequest<PhotoResponse>
public TReply Perform<TReply>(IBaseRequest<TReply> request) where TReply : BaseResponse, new()
public static void Main()
var client = new Service();
var request = new PostRequest();
var response = client.Perform(request);