Хорошим примером может быть следующий: например, у вас есть набор регистраторов, и вы можете указать пользователю тип, который будет использоваться во время выполнения через файл конфигурации.
Тогда:
string rawLoggerType = configurationService.GetLoggerType();
Type loggerType = Type.GetType(rawLoggerType);
ILogger logger = Activator.CreateInstance(loggerType.GetType()) as ILogger;
ИЛИ другой случай, когда у вас есть фабрика общих сущностей, которая создает сущность, а также отвечает за инициализацию сущности данными, полученными из БД:
(псевдокод)
public TEntity CreateEntityFromDataRow<TEntity>(DataRow row)
where TEntity : IDbEntity, class
{
MethodInfo methodInfo = typeof(T).GetMethod("BuildFromDataRow");
TEntity instance = Activator.CreateInstance(typeof(TEntity)) as TEntity;
return methodInfo.Invoke(instance, new object[] { row } ) as TEntity;
}