Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Metodeoverlasting | OOP-Grunnprinsipper
C# Utover Det Grunnleggende

bookMetodeoverlasting

Metodeoverlasting i C# gjør det mulig å definere flere metoder med samme navn i en klasse, hvor hver metode skiller seg ut ved ulike parametertyper, antall parametere, eller begge deler. Dette gir en mer ryddig og tilpasningsdyktig måte å håndtere ulike inndata-scenarier på.

For eksempel kan du ha to metoder med samme navn, men med forskjellig antall parametere:

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)); } }

I koden ovenfor ble sum-metoden overlastet til å ha to varianter av parametere. En metode kan også ha ulike returtyper for forskjellige varianter av seg selv, men det er viktig at det ikke oppstår tvetydighet, ellers vil kompilatoren vise en feil. Dette skyldes at kompilatoren hovedsakelig skiller mellom to metoder med samme navn basert på parameterlisten.

For eksempel:

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; }

Koden ovenfor er feil fordi parameterne er nøyaktig de samme som i den opprinnelige metoden, mens returtypen er forskjellig. Dette er ikke tillatt, siden det gjør det umulig for kompilatoren (eller til og med for mennesker) å velge hvilken som skal kjøres når metoden kalles:

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

Derfor bør en metode som overbelastes og har en annen returtype også ha et annet sett med parametere for å gjøre den tydelig og unngå tvetydighet. Følgende er også feil:

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; }

Dette er fordi parameterens navn ikke har betydning, men typene deres gjør det. Følgende tilfeller av overbelastning er gyldige:

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. Hvordan skiller kompilatoren mellom overbelastede metoder?

2. Hvilket av følgende er et gyldig eksempel på metodeoverbelastning?

question mark

Hvordan skiller kompilatoren mellom overbelastede metoder?

Select the correct answer

question mark

Hvilket av følgende er et gyldig eksempel på metodeoverbelastning?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 7

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you give more examples of valid method overloading in C#?

What are some common mistakes to avoid when overloading methods?

Can you explain how method overloading differs from method overriding?

Awesome!

Completion rate improved to 2.04

bookMetodeoverlasting

Sveip for å vise menyen

Metodeoverlasting i C# gjør det mulig å definere flere metoder med samme navn i en klasse, hvor hver metode skiller seg ut ved ulike parametertyper, antall parametere, eller begge deler. Dette gir en mer ryddig og tilpasningsdyktig måte å håndtere ulike inndata-scenarier på.

For eksempel kan du ha to metoder med samme navn, men med forskjellig antall parametere:

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)); } }

I koden ovenfor ble sum-metoden overlastet til å ha to varianter av parametere. En metode kan også ha ulike returtyper for forskjellige varianter av seg selv, men det er viktig at det ikke oppstår tvetydighet, ellers vil kompilatoren vise en feil. Dette skyldes at kompilatoren hovedsakelig skiller mellom to metoder med samme navn basert på parameterlisten.

For eksempel:

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; }

Koden ovenfor er feil fordi parameterne er nøyaktig de samme som i den opprinnelige metoden, mens returtypen er forskjellig. Dette er ikke tillatt, siden det gjør det umulig for kompilatoren (eller til og med for mennesker) å velge hvilken som skal kjøres når metoden kalles:

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

Derfor bør en metode som overbelastes og har en annen returtype også ha et annet sett med parametere for å gjøre den tydelig og unngå tvetydighet. Følgende er også feil:

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; }

Dette er fordi parameterens navn ikke har betydning, men typene deres gjør det. Følgende tilfeller av overbelastning er gyldige:

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. Hvordan skiller kompilatoren mellom overbelastede metoder?

2. Hvilket av følgende er et gyldig eksempel på metodeoverbelastning?

question mark

Hvordan skiller kompilatoren mellom overbelastede metoder?

Select the correct answer

question mark

Hvilket av følgende er et gyldig eksempel på metodeoverbelastning?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 7
some-alt