Metodeoverlasting
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
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 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
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 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
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 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
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; }
Dette er fordi parameterens navn ikke har betydning, men typene deres gjør det. Følgende tilfeller av overbelastning 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 skiller kompilatoren mellom overbelastede metoder?
2. Hvilket av følgende er et gyldig eksempel på metodeoverbelastning?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
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
Metodeoverlasting
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
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 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
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 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
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 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
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; }
Dette er fordi parameterens navn ikke har betydning, men typene deres gjør det. Følgende tilfeller av overbelastning 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 skiller kompilatoren mellom overbelastede metoder?
2. Hvilket av følgende er et gyldig eksempel på metodeoverbelastning?
Takk for tilbakemeldingene dine!