Это будет зависеть от того, как m_ProtectedMethod
будет потребляться, но я нашел компромисс в своей ситуации, где я использую одну перегрузку больше, чем другую.
Просто определите более простой (имеющий менее общий параметры) Action & lt;> variable, которая вызывает более сложный метод Action Variable. Это может быть достигнуто либо в (i) локальном объеме использования; или (ii) область объекта при присвоении свойства действия или конструкции объекта.
Поскольку нет такой вещи, как перегрузка переменных / свойств, вам нужны два разных имени для двух связанных переменных Action.
EG i: Локальная область (возможно, не самая подходит для вашего сценария)
public MyMethod(Action<IEnumerable<string>, string, int> m_ProtectedMethod2)
{
Action<IEnumerable<string>, string> m_ProtectedMethod = (p1,p2) => {
m_ProtectedMethod2(p1,p2,1); //The value 1 is the default 3rd parameter
}
...Do something
m_ProtectedMethod(param1, param2);
...Do something
...If something
m_ProtectedMethod2(param1, param2, param3); //Calling the more complex form directly
...Do something
}
EG ii: Object Scope
private Action<IEnumerable<string>, string, int> m_ProtectedMethod2 = null;
private Action<IEnumerable<string>, string> m_ProtectedMethod = null;
protected Action<IEnumerable<string>, string, int> ProtectedMethod
{
get { return m_ProtectedMethod2; }
set {
m_ProtectedMethod2 = value;
m_ProtectedMethod = (p1,p2) => {
m_ProtectedMethod2(p1,p2,1); //The value 1 is the default 3rd parameter
}
}
}
public MyMethod()
{
...Do something
m_ProtectedMethod(param1, param2);
...Do something
...If something
m_ProtectedMethod2(param1, param2, param3); //Calling the more complex form directly
...Do something
}
Обратите внимание, что в обоих случаях я задал значение по умолчанию для более неискренней именованной переменной, имеющей 2, так что при потреблении более простая перегрузка имеет более основное имя переменной.
См. также этот вопрос. JetBrains dotTrace является лучшим профилировщиком.NET, которого я нашел (и я судил в значительной степени всех, кого существует), потому что это - единственное, которое имеет достаточно низко наверху для обработки интенсивного процессором приложения. Это также просто, точно и хорошо разработано - настоятельно рекомендованный!
Профилировщик муравьев работает на меня http://www.red-gate.com/products/ANTS_Profiler/
Если Вы ищете что-то свободное, я использую NProf. Хотя его довольно ограниченное и может отказать или зависнуть на определенных программах.
Мне нравится dotTrace3.1, Он работал действительно хорошо на меня.
Профилировщик Памяти.NET является превосходным инструментом для профилирования использования памяти.
Не свободный, но у меня просто была сложная проблема в огромной кодовой базе с потоками. Профилировщик Visual Studio получил меня близко, но Профилировщик Antz заблокировал его вниз. Это не свободно, но это было намного менее безболезненным, чем установка Visual Studio.
Наша команда использует EQATEC Profiler , я нашел его простым и простым в использовании. Он работает без изменений в исходном коде, но я не думаю, что интеграция Visual Studio возможно.