Metodien Ylikuormitus
Menetelmän ylikuormitus C#:ssa mahdollistaa useiden samannimisten metodien määrittelyn luokassa, joissa eroavaisuudet ovat parametrien tyypeissä, määrissä tai molemmissa. Tämä tarjoaa selkeämmän ja joustavamman tavan käsitellä erilaisia syöteskenaarioita.
Esimerkiksi voit määritellä kaksi samannimistä metodia, joilla on eri määrä parametreja:
index.cs
12345678910111213141516171819using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }
Yllä olevassa koodissa sum
-metodi on ylikuormitettu kahdella erilaisella parametrilistalla. Metodilla voi myös olla eri palautustyyppejä eri variaatioissa, mutta on tärkeää, ettei synny epäselvyyttä, sillä kääntäjä tunnistaa samannimiset metodit ensisijaisesti niiden parametrilistan perusteella.
Esimerkiksi:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }
Yllä oleva koodi on virheellinen, koska parametrien määrä ja tyyppi ovat täsmälleen samat kuin alkuperäisessä metodissa, mutta palautustyyppi on eri. Tämä ei ole sallittua, koska tällöin kääntäjän (tai ihmisen) on mahdotonta valita, kumpaa metodia suoritetaan kutsuttaessa:
index.cs
123sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error
Tämän vuoksi, kun metodia ylikuormitetaan, metodilla, jolla on eri palautustyyppi, tulisi olla myös erilainen joukko parametreja, jotta se voidaan erottaa ja välttää epäselvyys. Seuraava on myös virheellinen:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }
Tämä johtuu siitä, että parametrien nimillä ei ole merkitystä, mutta niiden tyypeillä on. Seuraavat ylikuormitustapaukset ovat sallittuja:
index.cs
1234567891011121314151617181920212223242526using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }
1. Miten kääntäjä erottaa ylikuormitetut metodit toisistaan?
2. Mikä seuraavista on kelvollinen esimerkki metodin ylikuormituksesta?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 2.04
Metodien Ylikuormitus
Pyyhkäise näyttääksesi valikon
Menetelmän ylikuormitus C#:ssa mahdollistaa useiden samannimisten metodien määrittelyn luokassa, joissa eroavaisuudet ovat parametrien tyypeissä, määrissä tai molemmissa. Tämä tarjoaa selkeämmän ja joustavamman tavan käsitellä erilaisia syöteskenaarioita.
Esimerkiksi voit määritellä kaksi samannimistä metodia, joilla on eri määrä parametreja:
index.cs
12345678910111213141516171819using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }
Yllä olevassa koodissa sum
-metodi on ylikuormitettu kahdella erilaisella parametrilistalla. Metodilla voi myös olla eri palautustyyppejä eri variaatioissa, mutta on tärkeää, ettei synny epäselvyyttä, sillä kääntäjä tunnistaa samannimiset metodit ensisijaisesti niiden parametrilistan perusteella.
Esimerkiksi:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }
Yllä oleva koodi on virheellinen, koska parametrien määrä ja tyyppi ovat täsmälleen samat kuin alkuperäisessä metodissa, mutta palautustyyppi on eri. Tämä ei ole sallittua, koska tällöin kääntäjän (tai ihmisen) on mahdotonta valita, kumpaa metodia suoritetaan kutsuttaessa:
index.cs
123sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error
Tämän vuoksi, kun metodia ylikuormitetaan, metodilla, jolla on eri palautustyyppi, tulisi olla myös erilainen joukko parametreja, jotta se voidaan erottaa ja välttää epäselvyys. Seuraava on myös virheellinen:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }
Tämä johtuu siitä, että parametrien nimillä ei ole merkitystä, mutta niiden tyypeillä on. Seuraavat ylikuormitustapaukset ovat sallittuja:
index.cs
1234567891011121314151617181920212223242526using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }
1. Miten kääntäjä erottaa ylikuormitetut metodit toisistaan?
2. Mikä seuraavista on kelvollinen esimerkki metodin ylikuormituksesta?
Kiitos palautteestasi!