Parametry metod
Dzisiaj opowiem o tym jak za pomocą słów kluczowych można zmieniać działanie parametrów metod tak, ażeby wywołać określone zachowanie.
ref
To słowo kluczowe określa, że oznaczony nim parametr ma być traktowany jak referencja na obiekt. Z jego wykorzystaniem możemy modyfikować obiekty przekazane jako parametr. Dotyczy to zarówno typów ValueType jak również całych instancji obiektów referencyjnych. Co ważne ref umożliwia przekazywanie parametrów w obu kierunkach.
1 2 3 4 5 6 7 8 |
int intValue = 0; Increment(ref intValue); public static void Increment(ref int variable) { Console.WriteLine("increment"); variable += 1; } |
out
Zasadniczo działa na podobnej zasadzie do wcześniej opisanego ref-a, z tą różnicą iż w tym przypadku jesteśmy zobligowani do przypisana wartości naszej zmiennej zwracanej. Nie ma również możliwości odczytania jaka wartość była w zmiennej wcześniej.
1 2 3 4 5 6 7 8 9 10 11 |
int intValue; if(GetIntValue(out intValue)) { //use of intValue } public static bool GetIntValue(out int variable) { variable = 10; return true; } |
params
Params umożliwia przekazanie do metody dowolnej liczby parametrów. Tak oznaczony parametr musi być ostatnim parametrem w metodzie, a także być typu tablicowego. Należy zwrócić uwagę na przeciążanie metod z parametrem params, gdyż metody z konkretną liczbą elementów zawsze będzie wykorzystywany przed metodą z nie określoną liczbą elementów.
1 2 3 4 5 6 7 8 9 10 |
public static int AddAll(params int[] values) { return values.Sum(); } // usage AddAll(2,3,6,3,1,6,9,4,123,4567); // or int[] table = new int[] { 2, 5, 7, 99, 4, 2 }; AddAll(table); |