Metodeoverbelastning
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
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)); } }
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
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; }
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
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
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
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; }
Det skyldes, at navne på parametre er uden betydning, men deres typer er vigtige. Følgende overbelastningssituationer er gyldige:
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. Hvordan skelner compileren mellem overbelastede metoder?
2. Hvilket af følgende er et gyldigt eksempel på metodeoverbelastning?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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
Metodeoverbelastning
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
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)); } }
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
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; }
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
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
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
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; }
Det skyldes, at navne på parametre er uden betydning, men deres typer er vigtige. Følgende overbelastningssituationer er gyldige:
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. Hvordan skelner compileren mellem overbelastede metoder?
2. Hvilket af følgende er et gyldigt eksempel på metodeoverbelastning?
Tak for dine kommentarer!