Metodai yra funkcijos apibrėžtos klasėje. C# palaiko bogas parametrų savybes — pasirenkamus/pavadintus argumentus, ref/out/in modifikatorius, params masyvus — ir (kelis metodus su tuo pačiu vardu, bet skirtingais parametrais).
public int Add(int a, int b) => a + b; // expression-bodied (concise)
public string Greet(string name, string greeting = "Hello") // default parameter
{
return $"{greeting}, {name}";
}
Greet("Ann"); // "Hello, Ann"
Greet("Ann", greeting: "Hi"); // named argument
Metodai nurodo grąžinamo tipo, vardo ir parametrų. Numatytieji parametrai daro argumentus pasirenkamus, o pavadinti argumentai leidžia perduoti pagal vardą (aiškiau, galima praleisti pasirenkamus).
// ref — pass by reference (method can modify the caller's variable)
void Increment(ref int x) { x++; }
int n = 5; Increment(ref n); // n is now 6
// out — for returning multiple values (must be assigned in the method)
bool TryParse(string s, out int result) { result = ...; return true; }
if (int.TryParse("42", out int value)) { } // the common TryX pattern
// in — pass by reference but READ-ONLY (performance for large structs)
void Process(in LargeStruct data) { }
out plačiai naudojamas TryParse šablone (grąžinant sėkmės žymę ir rezultatą saugiai); ref leidžia modifikuoti iškviečiančiojo kintamąjį; in perduoda didelius struktūras efektyviai be kopijavimo.
// params — variable number of arguments
int Sum(params int[] numbers) => numbers.Sum();
Sum(1, 2, 3, 4); // any number
// OVERLOADING — same name, different parameters
void Print(int x) { }
void Print(string s) { }
void Print(int x, int y) { }
Print(5); // calls the int version — resolved by argument types
Perkrovimas leidžia keliems metodams dalintis vardu, skiriamais parametrų tipais/skaičiumi — kompiliatorius pasirenka atitinkantį. params priima kintamą argumentų skaičių.
Metodai yra elgesio šaltiniai C# kalboje, ir supratimas apie jų turtingas parametrų savybes yra svarbus rašant lanksčią, išraiškingą kodą.
Žinoti, kaip apibrėžti metodus (įskaitant glaustą išraiškais nusakomą sintaksę), naudoti numatytuosius ir pavadintus parametrus (pasirenkamoms argumentams ir skaitomoms iškvietimams) bei taikyti metodų perkrovimą (tas pats vardas, skirtingi parametrai — intuityviais API, tvarkančiais skirtingus argumentų tipus) yra kasdieninės žinios.
Parametrų modifikatoriai ypatingo dėmesio nusipelno: out plačiai naudojamas visur paplitusiame TryParse šablone (int.TryParse(s, out var result) — saugiai grąžinant sėkmės žymę ir rezultatą be išimčių, bendras, idiomatinis C# šablonas), ref leidžia modifikuoti iškviečiančiojo kintamąjį, o in perduoda didelius struktūrus pagal nuorodą dėl našumo.
Suprasti šiuos dalykus — metodus, parametrų savybes (pasirenkamus/pavadintus/params), perkrovimą lanksčiais API ir ref/out/in modifikatorius (ypač out pagrįstą TryX idiomą) — yra pagrindinis dalykas tiek rašant C# metodus, tiek naudojant daugelį .NET API, kurie remiasi šiomis savybėmis.
Kadangi metodai ir jų parametrai yra visos C# kodo šerdis, o tokios savybės kaip perkrovimas, pasirenkamieji parametrai ir TryX šablonas pasirodo nuolat, jų valdymas yra pagrindinė, neišvengiama žinias veikiam C# kūrimui.