Reputation: 5770
I have two methods that are overloads of each other
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
}
}
In my example, the GetPrice(make, model, year) overload is cheap to execute but the GetPrice(vinNumber) method is expensive. The problem is that the expensive method has the fewest parameters and it shows up first in the C# intellisense.
Both methods are valid, but I want to encourage people to call the cheap method. But people tend to not look through all the overloads in Intellisense before choosing a method to call, and the expensive one is being called too often in my company's codebase.
Is there a way to tell Visual Studio to give "intellisense priority" to a particular method so it shows up first?
Upvotes: 11
Views: 2215
Reputation: 5593
You could decorate the method with the Obsolete tag, which will also generate a warning or error depending on settings.
[System.Obsolete("use GetPrice(make, model, year)")]
Upvotes: 2
Reputation: 210130
What happens is this:
What you might consider doing is, instead of overloads, naming the members the same at the beginning and different at the end (GetMake
vs GetMakeSlow
, but obviously something better than that) so they show up together in Intellisense but it's communicated which you should use.
Otherwise, make them true overloads but use XML documentation to put a clear warning on the slow one.
Upvotes: 1
Reputation: 8938
Only solution I can offer is comments but it doesn't mean the user will pay attention to them:
/// <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)
{
...
}
Edit: I tried this an it didn't make any difference:
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) { }
}
Upvotes: 0
Reputation: 83254
Don't think so.
Unless you write a intellisense plugin ( like Resharper) and hijack the default intellisense and create a program for users to assign the priority.
Upvotes: 1