using System.Collections.Generic;
public class DistributorTarget
public string Subject { get; set; }
public string Body { get; set; }
public abstract class Distributor<T> where T : DistributorTarget
public abstract bool IsDistributing();
public class LogDistributorTarget : DistributorTarget
public class LogDistributor : Distributor<LogDistributorTarget>
public override bool IsDistributing()
private Dictionary<Type, object> distributors = new Dictionary<Type, object>();
LogDistributor logDistributor = new LogDistributor();
distributors.Add(typeof(LogDistributorTarget), logDistributor);
Console.WriteLine("Value of Type LogDistributor is " + distributors[typeof(LogDistributorTarget)]);
var dist = distributors[typeof(LogDistributorTarget)];
Console.WriteLine("Value of var is " + dist);