Два хороших варианта, которые я вижу: 1. Необязательные параметры и 2. Наличие методов, вызывающих друг друга по мере необходимости.И то, и другое значительно сократит объем кода, который вам нужно написать.
Вот пример необязательных параметров (VS 2010 или более поздняя версия).В string x = ""
, ""
является значением по умолчанию для x
.Значения по умолчанию должны быть константами времени компиляции.
public static void Show(string x = "", string y = null, int i = 0, param p = null, ...... param21st z = null)
{
if (//see the arguments and decide)
//do stuff ignoring rest of the arguments;
else if (//passed arguments are of these type)
//then do this stuff.
else if (so and so)
// so and so.
}
Когда вы вызываете его, если вы не включаете все параметры, вам может потребоваться дать им имена, чтобы компилятору было ясно, что вы есть и не 'Указание:
CustomMessageBox.Show(x: "hi", y: "there", p: myObject);
Это на самом деле трюк компилятора, который автоматически заполняет все не включенные параметры их значениями по умолчанию.
Другой вариант - заставить методы вызывать друг друга каквозможный.Таким образом, вы не дублируете код 21 раз, как много разных способов его запуска.
public static void Show(string x){Show(x, null);}
public static void Show(int x){//do something}
public static void Show(param x){Show(string.Empty, x);}
public static void Show(param2 x){//do something}
public static void Show(string x, param y){//do something}
Преимущество такого способа состоит в том, что вы можете передавать вещи помимо констант, такие как newэкземпляры объектов или статических объектов только для чтения.