Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Metodien Ylikuormitus | OOP:n Perusteet
C# Perusteiden Jälkeen

bookMetodien 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

index.cs

copy
12345678910111213141516171819
using 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

index.cs

copy
12345678910
static 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

index.cs

copy
123
sum(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

index.cs

copy
12345678910
static 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

index.cs

copy
1234567891011121314151617181920212223242526
using 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?

question mark

Miten kääntäjä erottaa ylikuormitetut metodit toisistaan?

Select the correct answer

question mark

Mikä seuraavista on kelvollinen esimerkki metodin ylikuormituksesta?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 7

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 2.04

bookMetodien 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

index.cs

copy
12345678910111213141516171819
using 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

index.cs

copy
12345678910
static 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

index.cs

copy
123
sum(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

index.cs

copy
12345678910
static 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

index.cs

copy
1234567891011121314151617181920212223242526
using 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?

question mark

Miten kääntäjä erottaa ylikuormitetut metodit toisistaan?

Select the correct answer

question mark

Mikä seuraavista on kelvollinen esimerkki metodin ylikuormituksesta?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 7
some-alt