в чому різниця між цим і просто створенням методу, який отримує список або масив?
Різниця між
void M(params int[] x)
і
void N(int[] x)
полягає в тому, що M може називатися так:
M(1, 2, 3)
або так:
M(new int[] { 1, 2, 3 });
але N може називатися лише другим , не першим способом.
можливо, це має певний вплив на продуктивність?
Вплив на продуктивність полягає в тому, що ви телефонуєте M
першим чи другим способом, будь-яким способом ви створюєте масив. Створення масиву впливає на продуктивність, оскільки це вимагає часу і пам’яті. Пам'ятайте, що вплив на ефективність слід вимірювати відповідно до цілей ефективності; малоймовірно, що вартість створення додаткового масиву є фактором решітки, що є різницею між успіхом і невдачею на ринку.
Я не повністю розумію і не бачу, яким саме способом ви б віддали перевагу тому, що має необмежені параметри.
Це суто і цілком зручність для автора коду, який викликає метод; просто коротше і простіше писати
M(1, 2, 3);
замість того, щоб писати
M(new int[] { 1, 2, 3 });
Це просто економить кілька натискань клавіш на стороні абонента. Це все.
Кілька питань, які ви не задавали, але, можливо, хотіли б знати відповідь:
Як називається ця особливість?
Методи, що дозволяють передавати змінну кількість аргументів на стороні виклику, називаються варіатичними . Параметри методів - це те, як C # реалізує різноманітні методи.
Як працює дозвіл на перевантаження за допомогою варіативного методу?
Якщо ви зіткнулися з проблемою вирішення перевантаження, C # розгляне як "нормальну", так і "розширену" форми, а "нормальна" форма завжди виграє, якщо застосовуються обидві. Наприклад, врахуйте це:
void P(params object[] x){}
і у нас є дзвінок
P(null);
Є дві застосовні можливості. У "нормальній" формі ми викликаємо P
і передаємо нульову посилання для масиву. У «розгорнутій» формі ми називаємо P(new object[] { null })
. У цьому випадку перемагає нормальна форма. Якщо у нас був виклик, P(null, null)
то нормальна форма не застосовується, а розширена форма виграє за замовчуванням.
Завдання : Припустимо, у нас є var s = new[] { "hello" };
і дзвінок P(s);
. Опишіть, що відбувається на сайті виклику та чому. Ви можете бути здивовані!
Завдання : Припустимо, у нас є і те, void P(object x){}
і інше void P(params object[] x){}
. Що робить P(null)
і чому?
Завдання : Припустимо, у нас є і те, void M(string x){}
і інше void M(params string[] x){}
. Що робить M(null)
і чому? Чим це відрізняється від попереднього випадку?