Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Metodeoverbelastning | OOP-Grundprincipper
C# Ud Over Det Grundlæggende

bookMetodeoverbelastning

Metodeoverbelastning i C# gør det muligt at definere flere metoder med samme navn i en klasse, hvor hver metode adskiller sig ved deres parametertyper, antal parametre eller begge dele. Dette giver en mere overskuelig og fleksibel måde at håndtere forskellige inputscenarier på.

For eksempel kan du have to metoder med samme navn, men med forskelligt antal parametre:

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 ovenstående kode blev sum-metoden overbelastet til at have to varianter af parametre. En metode kan også have forskellige returtyper for sine varianter, men det er vigtigt, at der ikke opstår tvetydighed, da compileren ellers vil vise en fejl. Den primære måde, hvorpå compileren skelner mellem to metoder med samme navn, er deres parameterliste.

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 forkert, fordi parametrene er nøjagtigt de samme som i den oprindelige metode, mens returtypen er forskellig. Dette er ikke tilladt, da det gør det umuligt for compileren (eller selv for mennesker) at vælge, hvilken der skal udføres, når metoden kaldes:

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 skal en metode, der overbelastes, og som har en anden returtype, også have et andet sæt parametre for at gøre den adskillelig og fjerne tvetydighed. Følgende er også forkert:

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

Det skyldes, at navne på parametre er uden betydning, men deres typer er vigtige. Følgende overbelastningssituationer 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 skelner compileren mellem overbelastede metoder?

2. Hvilket af følgende er et gyldigt eksempel på metodeoverbelastning?

question mark

Hvordan skelner compileren mellem overbelastede metoder?

Select the correct answer

question mark

Hvilket af følgende er et gyldigt eksempel på metodeoverbelastning?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 7

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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

bookMetodeoverbelastning

Stryg for at vise menuen

Metodeoverbelastning i C# gør det muligt at definere flere metoder med samme navn i en klasse, hvor hver metode adskiller sig ved deres parametertyper, antal parametre eller begge dele. Dette giver en mere overskuelig og fleksibel måde at håndtere forskellige inputscenarier på.

For eksempel kan du have to metoder med samme navn, men med forskelligt antal parametre:

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 ovenstående kode blev sum-metoden overbelastet til at have to varianter af parametre. En metode kan også have forskellige returtyper for sine varianter, men det er vigtigt, at der ikke opstår tvetydighed, da compileren ellers vil vise en fejl. Den primære måde, hvorpå compileren skelner mellem to metoder med samme navn, er deres parameterliste.

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 forkert, fordi parametrene er nøjagtigt de samme som i den oprindelige metode, mens returtypen er forskellig. Dette er ikke tilladt, da det gør det umuligt for compileren (eller selv for mennesker) at vælge, hvilken der skal udføres, når metoden kaldes:

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 skal en metode, der overbelastes, og som har en anden returtype, også have et andet sæt parametre for at gøre den adskillelig og fjerne tvetydighed. Følgende er også forkert:

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

Det skyldes, at navne på parametre er uden betydning, men deres typer er vigtige. Følgende overbelastningssituationer 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 skelner compileren mellem overbelastede metoder?

2. Hvilket af følgende er et gyldigt eksempel på metodeoverbelastning?

question mark

Hvordan skelner compileren mellem overbelastede metoder?

Select the correct answer

question mark

Hvilket af følgende er et gyldigt eksempel på metodeoverbelastning?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 7
some-alt