Methode-Overbelasting
Methode-overloading in C# maakt het mogelijk om meerdere methoden met dezelfde naam in een klasse te definiëren, waarbij elke methode verschilt in het type parameters, het aantal parameters, of beide. Dit biedt een overzichtelijkere en flexibelere manier om verschillende invoerscenario's te verwerken.
Bijvoorbeeld, het is mogelijk om twee methoden met dezelfde naam te hebben maar met een verschillend aantal parameters:
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)); } }
In de bovenstaande code is de methode sum
overbelast om twee variaties van parameters te hebben. Een methode kan ook verschillende returntypes hebben voor verschillende variaties van zichzelf, maar het is belangrijk dat er geen ambiguïteit ontstaat. Anders zal de compiler een foutmelding geven, omdat de primaire manier voor een compiler om onderscheid te maken tussen twee methoden met dezelfde naam hun parameterlijst is.
Bijvoorbeeld:
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; }
De bovenstaande code is onjuist omdat de parameters exact hetzelfde zijn als die van de oorspronkelijke methode, terwijl het returntype verschilt. Dit is niet toegestaan, omdat het voor de compiler (of zelfs voor mensen) onmogelijk wordt om te bepalen welke methode uitgevoerd moet worden wanneer deze wordt aangeroepen:
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
Daarom moet bij het overloaden van een methode een methode met een ander retourtype ook een andere set parameters hebben om deze onderscheidend te maken en ambiguïteit te voorkomen. Het volgende is ook onjuist:
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; }
Dit komt doordat de namen van parameters niet van belang zijn, maar hun types wel. De volgende overload-situaties zijn geldig:
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. Hoe maakt de compiler onderscheid tussen overladen methoden?
2. Welke van de volgende is een geldig voorbeeld van method overloading?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
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
Methode-Overbelasting
Veeg om het menu te tonen
Methode-overloading in C# maakt het mogelijk om meerdere methoden met dezelfde naam in een klasse te definiëren, waarbij elke methode verschilt in het type parameters, het aantal parameters, of beide. Dit biedt een overzichtelijkere en flexibelere manier om verschillende invoerscenario's te verwerken.
Bijvoorbeeld, het is mogelijk om twee methoden met dezelfde naam te hebben maar met een verschillend aantal parameters:
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)); } }
In de bovenstaande code is de methode sum
overbelast om twee variaties van parameters te hebben. Een methode kan ook verschillende returntypes hebben voor verschillende variaties van zichzelf, maar het is belangrijk dat er geen ambiguïteit ontstaat. Anders zal de compiler een foutmelding geven, omdat de primaire manier voor een compiler om onderscheid te maken tussen twee methoden met dezelfde naam hun parameterlijst is.
Bijvoorbeeld:
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; }
De bovenstaande code is onjuist omdat de parameters exact hetzelfde zijn als die van de oorspronkelijke methode, terwijl het returntype verschilt. Dit is niet toegestaan, omdat het voor de compiler (of zelfs voor mensen) onmogelijk wordt om te bepalen welke methode uitgevoerd moet worden wanneer deze wordt aangeroepen:
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
Daarom moet bij het overloaden van een methode een methode met een ander retourtype ook een andere set parameters hebben om deze onderscheidend te maken en ambiguïteit te voorkomen. Het volgende is ook onjuist:
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; }
Dit komt doordat de namen van parameters niet van belang zijn, maar hun types wel. De volgende overload-situaties zijn geldig:
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. Hoe maakt de compiler onderscheid tussen overladen methoden?
2. Welke van de volgende is een geldig voorbeeld van method overloading?
Bedankt voor je feedback!