{"id":278,"date":"2026-03-11T12:31:59","date_gmt":"2026-03-11T10:31:59","guid":{"rendered":"https:\/\/mihkelunt.wordpress.com\/?page_id=278"},"modified":"2026-03-11T12:31:59","modified_gmt":"2026-03-11T10:31:59","slug":"meetodid","status":"publish","type":"page","link":"https:\/\/mihkelunt.eu\/wp\/programmerimine-1\/meetodid\/","title":{"rendered":"Meetodid"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">C# programmeerimiskeeles on <strong>meetod<\/strong> koodiplokk, mis sisaldab rida lauseid. Programm paneb need laused t\u00e4ituma, kutsudes meetodit v\u00e4lja ja t\u00e4psustades vajadusel meetodi argumendid. C#-s sooritatakse iga t\u00e4idetav instruktsioon meetodi kontekstis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Siin on p\u00f5hjalik \u00fclevaade meetoditega seotud m\u00f5istetest ja reeglitest:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. Meetodi allkiri (Signature) ja deklaratsioon<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Meetodid deklareeritakse klassis, struktuuris v\u00f5i liideses, m\u00e4\u00e4rates \u00e4ra j\u00e4rgmised osad, mis moodustavad meetodi allkirja:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>P\u00e4\u00e4sutase (Access level):<\/strong> N\u00e4iteks <code>public<\/code> (avalik) v\u00f5i <code>private<\/code> (privaatne).<\/li>\n\n\n\n<li><strong>Valikulised modifikaatorid:<\/strong> N\u00e4iteks <code>abstract<\/code> (abstraktne) v\u00f5i <code>sealed<\/code> (suletud).<\/li>\n\n\n\n<li><strong>Tagastusv\u00e4\u00e4rtus (Return value):<\/strong> T\u00fc\u00fcp, mille meetod tagastab, v\u00f5i <code>void<\/code>, kui meetod v\u00e4\u00e4rtust ei tagasta.<\/li>\n\n\n\n<li><strong>Nimi:<\/strong> Meetodi identifikaator.<\/li>\n\n\n\n<li><strong>Parameetrid:<\/strong> Sulgudes olevad t\u00fc\u00fcbid ja nimed, mis eraldatakse komadega.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Parameetrid vs argumendid<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Allikad teevad selget vahet kahel m\u00f5istel:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Parameetrid:<\/strong> M\u00e4\u00e4ratletakse meetodi definitsioonis (nimed ja t\u00fc\u00fcbid).<\/li>\n\n\n\n<li><strong>Argumendid:<\/strong> Konkreetsed v\u00e4\u00e4rtused, mida kutsuv kood meetodile edastab. Need peavad \u00fchilduma parameetri t\u00fc\u00fcbiga, kuid argumendi nimi koodis ei pea kattuma parameetri nimega definitsioonis.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. V\u00e4\u00e4rtuse ja viitega edastamine<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>V\u00e4\u00e4rtust\u00fc\u00fcbid:<\/strong> Vaikimisi edastatakse v\u00e4\u00e4rtust\u00fc\u00fcbi (nt <code>int<\/code>, <code>struct<\/code>) puhul meetodile selle <strong>koopia<\/strong>. Muudatused argumendis ei m\u00f5juta algset v\u00e4\u00e4rtust.<\/li>\n\n\n\n<li><strong>Viitet\u00fc\u00fcbid:<\/strong> Viitet\u00fc\u00fcbi (nt <code>class<\/code>) puhul edastatakse viide objektile. Kui muudate objekti liiget meetodi sees, kajastub see ka kutsuvas koodis, isegi kui objekt edastati v\u00e4\u00e4rtusena.<\/li>\n\n\n\n<li><strong>ref<\/strong><strong> ja <\/strong><strong>out<\/strong><strong> m\u00e4rks\u00f5nad:<\/strong> Kasutades <code>ref<\/code> m\u00e4rks\u00f5na, saab v\u00e4\u00e4rtust\u00fc\u00fcpe edastada viitega. <code>out<\/code> parameeter sarnaneb <code>ref<\/code>-ile, kuid see peab saama meetodi sees v\u00e4\u00e4rtuse enne meetodi l\u00f5ppemist.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. Erit\u00fc\u00fcpi meetodid<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>As\u00fcnkroonid meetodid (<\/strong><strong>async<\/strong><strong> ja <\/strong><strong>await<\/strong><strong>):<\/strong> V\u00f5imaldavad kutsuda as\u00fcnkroonseid toiminguid ilma keeruliste tagasikutseteta (<em>callbacks<\/em>). Need meetodid tagastavad tavaliselt <code>Task<\/code>, <code>Task&lt;T&gt;<\/code> v\u00f5i <code>void<\/code> (viimast peamiselt s\u00fcndmuste k\u00e4sitlejate puhul). As\u00fcnkroonsetes meetodites ei saa kasutada <code>ref<\/code> ega <code>out<\/code> parameetreid.<\/li>\n\n\n\n<li><strong>L\u00fchivormid (Expression body definitions):<\/strong> Kui meetod sisaldab ainult \u00fchte lauset v\u00f5i tagastab kohe avaldise tulemuse, saab kasutada l\u00fchendatud s\u00fcntaksit <code>=&gt;<\/code>.<\/li>\n\n\n\n<li><strong>Laiendusmeetodid (Extension methods):<\/strong> V\u00f5imaldavad lisada uusi meetodeid olemasolevatele t\u00fc\u00fcpidele ilma neid muutmata v\u00f5i neist p\u00e4rimata. C# 14 t\u00f5i sisse ka laiendusliikmed (<em>extension members<\/em>), mis v\u00f5imaldavad laiendusi loogiliselt grupeerida.<\/li>\n\n\n\n<li><strong>Lokaalsed funktsioonid:<\/strong> Meetodi sees defineeritud funktsioonid, millel on juurdep\u00e4\u00e4s \u00fcmbritseva meetodi muutujatele. Need on kasulikud koodi korrastamiseks ja neid saab kasutada ainult selles meetodis, kus nad on loodud.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5. Sisenemispunkt: <\/strong><strong>Main<\/strong><strong> meetod<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Iga C# rakenduse sisenemispunkt on <strong>Main<\/strong><strong> meetod<\/strong>, mille CLR kutsub v\u00e4lja programmi k\u00e4ivitamisel. See on staatiline meetod ja asub tavaliselt klassi sees. Uuemates versioonides (C# 9.0+) saab kasutada ka <strong>top-level statements<\/strong> l\u00e4henemist, kus kompilaator genereerib <code>Main<\/code> meetodi automaatselt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>6. Tagastusv\u00e4\u00e4rtused ja v\u00e4ljumine<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Meetod l\u00f5petab t\u00f6\u00f6, kui j\u00f5uab koodiploki l\u00f5ppu v\u00f5i kohtab <code>return<\/code> lauset. Kui meetodi tagastust\u00fc\u00fcp ei ole <code>void<\/code>, peab see alati kasutama <code>return<\/code> m\u00e4rks\u00f5na vastavat t\u00fc\u00fcpi v\u00e4\u00e4rtuse tagastamiseks. V\u00e4\u00e4rtusi saab tagastada ka viitega, kasutades <code>ref return<\/code> s\u00fcntaksit<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Minu n\u00e4ided : <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class StartPage\n    {\n        static void Main(string&#091;] args)\n        {\n            Console.WriteLine(&#034;vali funktisoon&#034;);\n            Console.WriteLine(&#034;1 - retsepti sisestamine&#034;);\n            Console.WriteLine(&#034;2 - retsepti lugemine&#034;);\n            Console.WriteLine(&#034;3 - koostis osade faili tekkimine&#034;);\n            Console.WriteLine(&#034;4 - koostis osade lugemine&#034;);\n            Console.WriteLine(&#034;5 - koostis osade muutmine &#034;);\n            Console.WriteLine(&#034;6 - Koostisosa otsing&#034;);\n            int&#091;] arvud = new int&#091;5];\n            string valik = Console.ReadLine();\n            \n            if (valik == &#034;1&#034;)\n            {\n                ulesanded.retseptid();\n            }\n            else if (valik == &#034;2&#034;)\n            {\n                ulesanded.retseptilistiavamine();\n            }\n            else if (valik == &#034;3&#034;)\n            {\n                ulesanded.KoostisosadFail();\n            }\n            else if (valik == &#034;4&#034;)\n            {\n                ulesanded.KoostisOsadelugemine();   \n            }\n            else if (valik == &#034;5&#034;)\n            {\n                ulesanded.Koostisosademuutmine(&#034;KoostisOsad.txt&#034;);\n            }\n            else if (valik == &#034;6&#034;)\n            {\n                ulesanded.Otsing(&#034;KoostisOsad.txt&#034;);\n            }\n            else if (valik == &#034;7&#034;)\n            {\n                ulesanded.Koostisosadesalvestamine(&#034;KoostisOsad.txt&#034;);\n            }\n            else if (valik == &#034;8&#034;)\n            {\n                menuUlesanne.MenuuUlesanne();\n            }\n            else\n            {\n                Console.WriteLine(&#034;viga&#034;);\n            }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4ited:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Meetodi allkiri (Signature)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/  p\u00e4\u00e4sutase  modifikaator  tagastust\u00fc\u00fcp  nimi      parameetrid\n    public     static        int           Liida     (int a, int b)\n{\n    return a + b;\n}\n\n\/\/ N\u00e4ited erinevate p\u00e4\u00e4sutasemetega\npublic    static void AvalikMeetod()  { }   \/\/ k\u00f5igile n\u00e4htav\nprivate   static void Privaatne()    { }   \/\/ ainult sees klassis\nprotected static void Kaitstud()     { }   \/\/ ainult alamklassides\ninternal  static void Sisemine()     { }   \/\/ ainult projektis<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h4 class=\"wp-block-heading\">2. Parameetrid vs Argumendid<\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ PARAMEETRID \u2013 meetodi definitsioonis\nstatic void Tervita(string nimi, int vanus)   \/\/ nimi, vanus = parameetrid\n{\n    Console.WriteLine($&#034;{nimi} on {vanus} aastane&#034;);\n}\n\n\/\/ ARGUMENDID \u2013 meetodi kutsumisel\nstring kasutaja = &#034;Mari&#034;;\nint aasta = 25;\n\nTervita(kasutaja, aasta);       \/\/ kasutaja, aasta = argumendid\nTervita(&#034;Jaan&#034;, 30);            \/\/ otse v\u00e4\u00e4rtused = argumendid<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3. V\u00e4\u00e4rtuse ja viitega edastamine<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ V\u00c4\u00c4RTUST\u00dc\u00dcP \u2013 koopia edastatakse, originaal ei muutu\nstatic void MuudaArvu(int arv)\n{\n    arv = 999;          \/\/ muudab ainult koopiat\n}\n\nint x = 10;\nMuudaArvu(x);\nConsole.WriteLine(x);  \/\/ 10 \u2013 originaal muutumata!\n\n\/\/ REF \u2013 originaal muutub\nstatic void MuudaRef(ref int arv)\n{\n    arv = 999;\n}\n\nint y = 10;\nMuudaRef(ref y);\nConsole.WriteLine(y);  \/\/ 999 \u2705\n\n\/\/ OUT \u2013 meetod peab omistama v\u00e4\u00e4rtuse\nstatic void JagaKaheks(int arv, out int osa1, out int osa2)\n{\n    osa1 = arv \/ 2;\n    osa2 = arv - osa1;\n}\n\nJagaKaheks(10, out int a, out int b);\nConsole.WriteLine($&#034;{a}, {b}&#034;);     \/\/ 5, 5\n\n\/\/ VIITET\u00dc\u00dcP \u2013 objekt muutub\nstatic void LisaNimekiri(List&lt;string&gt; nimekiri, string nimi)\n{\n    nimekiri.Add(nimi);     \/\/ originaal muutub!\n}\n\nvar nimed = new List&lt;string&gt; { &#034;Mari&#034; };\nLisaNimekiri(nimed, &#034;Jaan&#034;);\nConsole.WriteLine(nimed.Count);     \/\/ 2 \u2705<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h4 class=\"wp-block-heading\">4. Erit\u00fc\u00fcpi meetodid<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">Async \/ Await<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ As\u00fcnkroonne meetod\nstatic async Task&lt;string&gt; LaeAndmed(string url)\n{\n    using HttpClient client = new HttpClient();\n    string sisu = await client.GetStringAsync(url);\n    return sisu;\n}\n\n\/\/ Kutsumine\nstatic async Task Main()\n{\n    string andmed = await LaeAndmed(&#034;https:\/\/example.com&#034;);\n    Console.WriteLine(andmed);\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">L\u00fchivormid (Expression body)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Pikk versioon\nstatic int Ruut(int x)\n{\n    return x * x;\n}\n\n\/\/ L\u00fchike versioon =&gt;\nstatic int Ruut(int x)          =&gt; x * x;\nstatic bool OnPaaris(int x)     =&gt; x % 2 == 0;\nstatic string Tervita(string n) =&gt; $&#034;Tere, {n}!&#034;;\nstatic void Prindi(string t)    =&gt; Console.WriteLine(t);<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Laiendusmeetodid<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Laiendame string t\u00fc\u00fcpi\nstatic class StringLaiendused\n{\n    public static bool OnNumber(this string tekst)\n    {\n        return int.TryParse(tekst, out _);\n    }\n\n    public static string P\u00f6\u00f6ratud(this string tekst)\n    {\n        char&#091;] t\u00e4hed = tekst.ToCharArray();\n        Array.Reverse(t\u00e4hed);\n        return new string(t\u00e4hed);\n    }\n}\n\n\/\/ Kasutamine\nConsole.WriteLine(&#034;123&#034;.OnNumber());       \/\/ True\nConsole.WriteLine(&#034;abc&#034;.OnNumber());       \/\/ False\nConsole.WriteLine(&#034;Tere&#034;.P\u00f6\u00f6ratud());      \/\/ ereT<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Lokaalsed funktsioonid<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>static void ArvutaHind(double hind, int kogus)\n{\n    double l\u00f5ppHind = Arvuta(hind, kogus);      \/\/ kasutab lokaalset funktsiooni\n    Console.WriteLine($&#034;Kokku: {l\u00f5ppHind}\u20ac&#034;);\n\n    \/\/ Lokaalne funktsioon \u2013 ainult siin n\u00e4htav\n    double Arvuta(double h, int k)\n    {\n        double allahindlus = k &gt; 10 ? 0.1 : 0;\n        return h * k * (1 - allahindlus);\n    }\n}\n\nArvutaHind(5.99, 12);   \/\/ Kokku: 64.692\u20ac<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h4 class=\"wp-block-heading\">5. Main meetod \u2013 sisenemispunkt<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Klassikaline versioon\nclass Program\n{\n    static void Main(string&#091;] args)\n    {\n        Console.WriteLine(&#034;Tere maailm!&#034;);\n    }\n}\n\n\/\/ K\u00e4surea argumendid\nstatic void Main(string&#091;] args)\n{\n    foreach (string arg in args)\n        Console.WriteLine($&#034;Argument: {arg}&#034;);\n}\n\n\/\/ C# 9.0+ top-level (lihtsustatud)\nConsole.WriteLine(&#034;Tere maailm!&#034;);  \/\/ Main genereeritakse automaatselt\n\n\/\/ Async Main\nstatic async Task Main(string&#091;] args)\n{\n    await Task.Delay(1000);\n    Console.WriteLine(&#034;Valmis!&#034;);\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h4 class=\"wp-block-heading\">6. Tagastusv\u00e4\u00e4rtused ja ref return<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Mitu v\u00e4ljumispunkti\nstatic string Hinne(int punktid)\n{\n    if (punktid &gt;= 90) return &#034;A&#034;;\n    if (punktid &gt;= 80) return &#034;B&#034;;\n    if (punktid &gt;= 70) return &#034;C&#034;;\n    return &#034;F&#034;;                         \/\/ alati peab return olema!\n}\n\n\/\/ ref return \u2013 tagastab viite\nstatic ref int LeiaMax(ref int a, ref int b)\n{\n    if (a &gt; b) return ref a;\n    return ref b;\n}\n\nint x = 10, y = 20;\nref int max = ref LeiaMax(ref x, ref y);\nmax = 999;                              \/\/ muudab originaalmuutujat!\nConsole.WriteLine(y);                  \/\/ 999<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>C# programmeerimiskeeles on meetod koodiplokk, mis sisaldab rida lauseid. Programm paneb need laused t\u00e4ituma, kutsudes meetodit v\u00e4lja ja t\u00e4psustades vajadusel meetodi argumendid. C#-s sooritatakse iga t\u00e4idetav instruktsioon meetodi kontekstis. Siin on p\u00f5hjalik \u00fclevaade meetoditega seotud m\u00f5istetest ja reeglitest: 1. Meetodi allkiri (Signature) ja deklaratsioon Meetodid deklareeritakse klassis, struktuuris v\u00f5i liideses, m\u00e4\u00e4rates \u00e4ra j\u00e4rgmised osad, mis [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":236,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-278","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mihkelunt.eu\/wp\/wp-json\/wp\/v2\/pages\/278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mihkelunt.eu\/wp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mihkelunt.eu\/wp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mihkelunt.eu\/wp\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mihkelunt.eu\/wp\/wp-json\/wp\/v2\/comments?post=278"}],"version-history":[{"count":0,"href":"https:\/\/mihkelunt.eu\/wp\/wp-json\/wp\/v2\/pages\/278\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/mihkelunt.eu\/wp\/wp-json\/wp\/v2\/pages\/236"}],"wp:attachment":[{"href":"https:\/\/mihkelunt.eu\/wp\/wp-json\/wp\/v2\/media?parent=278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}