Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Metodöverlagring | OOP-Grunder
C# Bortom Grunderna

bookMetodöverlagring

Metodöverlagring i C# möjliggör definition av flera metoder med samma namn i en klass, där varje metod skiljer sig åt i sina parametertyper, antal parametrar eller båda, vilket ger ett mer strukturerat och flexibelt sätt att hantera olika indatafall.

Till exempel kan du ha två metoder med samma namn men olika antal parametrar:

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 ovan överlagrades metoden sum för att ha två varianter av parametrar. En metod kan även ha olika returtyper för sina olika varianter, men det är viktigt att det inte uppstår någon tvetydighet, annars kommer kompilatorn att visa ett fel eftersom det primära sättet för en kompilator att särskilja mellan två metoder med samma namn är deras parameterlista.

Till exempel:

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 ovan är felaktig eftersom parametrarna är exakt desamma som i den ursprungliga metoden medan returtypen är annorlunda. Detta är inte tillåtet eftersom det gör det omöjligt för kompilatorn (eller ens för människor) att avgöra vilken som ska köras när metoden anropas:

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

Det är därför, vid överlagring av en metod, att en metod med en annan returtyp också bör ha en annan uppsättning parametrar för att göra den särskiljbar och undvika tvetydighet. Följande är också fel:

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

Detta beror på att parametrarnas namn inte spelar någon roll, men deras typer gör det. Följande överlagringsfall är giltiga:

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. Hur särskiljer kompilatorn mellan överlagrade metoder?

2. Vilket av följande är ett giltigt exempel på metodöverlagring?

question mark

Hur särskiljer kompilatorn mellan överlagrade metoder?

Select the correct answer

question mark

Vilket av följande är ett giltigt exempel på metodöverlagring?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 7

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

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

bookMetodöverlagring

Svep för att visa menyn

Metodöverlagring i C# möjliggör definition av flera metoder med samma namn i en klass, där varje metod skiljer sig åt i sina parametertyper, antal parametrar eller båda, vilket ger ett mer strukturerat och flexibelt sätt att hantera olika indatafall.

Till exempel kan du ha två metoder med samma namn men olika antal parametrar:

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 ovan överlagrades metoden sum för att ha två varianter av parametrar. En metod kan även ha olika returtyper för sina olika varianter, men det är viktigt att det inte uppstår någon tvetydighet, annars kommer kompilatorn att visa ett fel eftersom det primära sättet för en kompilator att särskilja mellan två metoder med samma namn är deras parameterlista.

Till exempel:

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 ovan är felaktig eftersom parametrarna är exakt desamma som i den ursprungliga metoden medan returtypen är annorlunda. Detta är inte tillåtet eftersom det gör det omöjligt för kompilatorn (eller ens för människor) att avgöra vilken som ska köras när metoden anropas:

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

Det är därför, vid överlagring av en metod, att en metod med en annan returtyp också bör ha en annan uppsättning parametrar för att göra den särskiljbar och undvika tvetydighet. Följande är också fel:

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

Detta beror på att parametrarnas namn inte spelar någon roll, men deras typer gör det. Följande överlagringsfall är giltiga:

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. Hur särskiljer kompilatorn mellan överlagrade metoder?

2. Vilket av följande är ett giltigt exempel på metodöverlagring?

question mark

Hur särskiljer kompilatorn mellan överlagrade metoder?

Select the correct answer

question mark

Vilket av följande är ett giltigt exempel på metodöverlagring?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 7
some-alt