Ответ 1
Не думай так.
Если вы не написали плагин intellisense (например, Resharper) и не захватили по умолчанию intellisense и не создали программу для пользователей, чтобы назначить приоритет.
У меня есть два метода, которые являются перегрузками друг друга
public class Car
{
public int GetPrice(string vinNumber)
{
string make = Database.GetMake(vinNumber); // expensive operation
string model = Database.GetModel(vinNumber); // expensive operation
int year = Database.GetYear(vinNumber); // expensive operation
return this.GetPrice(make, model, year);
}
public int GetPrice(string make, string model, int year)
{
// Calculate value and return
}
}
В моем примере перегрузка GetPrice (make, model, year) дешева для выполнения, но метод GetPrice (vinNumber) стоит дорого. Проблема в том, что дорогой метод имеет наименьшие параметры, и он появляется сначала в С# intellisense.
Оба метода действительны, но я хочу призвать людей назвать дешевый метод. Но люди, как правило, не просматривают все перегрузки в Intellisense, прежде чем выбирать метод для вызова, а дорогостоящий вызов часто возникает в моей кодовой базе.
Есть ли способ сказать Visual Studio дать "приоритет intellisense" конкретному методу, чтобы он отображался первым?
Не думай так.
Если вы не написали плагин intellisense (например, Resharper) и не захватили по умолчанию intellisense и не создали программу для пользователей, чтобы назначить приоритет.
Вы можете украсить метод тегом Obsolete, который также будет генерировать предупреждение или ошибку в зависимости от настроек.
[System.Obsolete("use GetPrice(make, model, year)")]
Что происходит:
То, что вы могли бы подумать, это вместо перегрузок, именования членов одинаковыми в начале и разными в конце (GetMake
vs GetMakeSlow
, но, очевидно, что-то лучше этого), чтобы они отображались вместе в Intellisense но он сообщил, что вы должны использовать.
В противном случае сделайте их истинными перегрузками, но используйте XML-документацию, чтобы поставить ясное предупреждение на медленное.
Единственное решение, которое я могу предложить, это комментарии, но это не значит, что пользователь обратит на них внимание:
/// <summary>
/// This method should be used as a last resort...
/// </summary>
/// <param name="vinNumber"></param>
/// <returns></returns>
public int GetPrice(string vinNumber)
{
...
}
/// <summary>
/// This is the preferred method...
/// </summary>
/// <param name="make"></param>
/// <param name="model"></param>
/// <param name="year"></param>
/// <returns></returns>
public int GetPrice(string make, string model, int year)
{
...
}
Изменить: Я пробовал это, это не имело никакого значения:
class Class1
{
public static void Method(int value1) { }
public static void Method(int value1, int value2) { }
public static void Method(int value1, int value2, int value3) { }
}
class Class2
{
public static void Method(int value1, int value2, int value3) { }
public static void Method(int value1, int value2) { }
public static void Method(int value1) { }
}