Как мне добавить дополнительные параметры в методы? - PullRequest
0 голосов
/ 05 мая 2009

Можно ли объявить необязательные параметры в методах?

Например, в Delphi я могу сделать что-то вроде:

procedure Test(p1:integer;p2:integer;p3:integer = 2;p4:integer = 4)

Когда я вызываю эту функцию, я могу вызвать ее с четырьмя параметрами или двумя параметрами:

Test(2,3); //p3 = 2,p4 = 4.
Test(2,3,4,5); //p3 = 4,p4 = 5;

Как это возможно в C #?

Ответы [ 7 ]

5 голосов
/ 05 мая 2009

Боюсь, что это невозможно в C # 1–3. Однако, хорошая новость в том, что, поскольку это была очень востребованная функция (хотя, конечно, есть те, кто не хотел бы ее видеть), Microsoft наконец решил добавить его в C # 4.

Синтаксис C # 4 выглядит следующим образом:

public static void SayHello(string s = "Hello World!")
{
    Console.WriteLine(s);
}

Использование:

SayHello(); // Prints "Hello World!"
SayHello("Hello."); // Prints "Hello."
SayHello(s: "Hello."); // Prints "Hello."

(В последнем примере используется именованный аргумент, который действительно не нужен в этом случае, но помогает, когда у вас есть несколько необязательных параметров.)

Подробнее об этом можно прочитать в этом блоге .

4 голосов
/ 05 мая 2009

Это будет возможно в C # 4.0, но до тех пор, пока он не будет выпущен, вы можете обойти его, создавая перегруженные версии вашего метода:

public void MyMethod( int a, int b, int c )
{
    ...
}

public void MyMethod( int a, int b)
{
   MyMethod(a, b, 4);
}
4 голосов
/ 05 мая 2009

Вам придется подождать C # 4.0 , который поддерживает необязательные параметры, или использовать стандартные механизмы перегрузки:

void Test(int p1, int p2, int p3, int p4)
{ }

void Test(int p1, int p2)
{
    Test(p1, p2, 2, 4);
}
1 голос
/ 05 мая 2009
using System;
using System.Runtime.InteropServices;

   public static void SayHello([Optional][DefaultParameterValue("Hello Universe!")] string s)
   {
      Console.WriteLine(s);
   }

Готово! :)

1 голос
/ 05 мая 2009

Вы можете использовать переменные аргументы

Используйте ключевое слово params.

void paramsExample(params int[] argsRest)
{

 if(argsRest.Length == 2) then...
 else if(argsRest.Length == 4) then...
 else error...

}
0 голосов
/ 05 мая 2009

Вы используете такие перегрузки

Test(int p1, int p2)
Test(int p1, int p2, int p3)

Вы можете заставить их вызывать закрытый метод, подобный этому

Test(int[] ps)

, а затем обработать данные.

Другой способ справиться с этим - НЕ использовать перегрузки / необязательные параметры, а вместо этого называть методы в соответствии с тем, что они делают - это может показаться плохим компромиссом, но ваш код, вероятно, станет легче читать.

0 голосов
/ 05 мая 2009

Ты пока не можешь этого сделать. Я думаю, что это особенность C # 4.0 .

Вы можете использовать params как обходной путь, но его можно использовать только последовательно, а не то, как некоторые языки обрабатывают параметры по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...