Junior — Middle
Как трябва да постъпите, ако в класа са обявени два интерфейса, съдържащи еднакви имена на методи?
sobes.tech AI
Отговор от AI
Ако в клас се реализират два интерфейса, съдържащи методи с еднакви имена и сигнатури, тогава:
- Ако методите имат еднаква сигнатура и тип на връщане, достатъчно е да се реализира един метод, който да удовлетворява и двата интерфейса.
- Ако методите с еднакви имена имат различна сигнатура (например, различни параметри), трябва да се реализират двата метода отделно.
- Ако интерфейсите съдържат методи с еднакви имена и сигнатури, но с различни по подразбиране (default) реализации, то в класа е необходимо явно да се препокрие този метод и да се посочи коя реализация да се използва, или да се предостави собствена.
Пример с конфликт на default методи:
interface IFirst {
void Method() => Console.WriteLine("First");
}
interface ISecond {
void Method() => Console.WriteLine("Second");
}
class MyClass : IFirst, ISecond {
public void Method() {
// Явно избираме реализацията
((IFirst)this).Method();
// или своята реализация
Console.WriteLine("MyClass Method");
}
}
Следователно, при конфликт на имена на методи от различни интерфейси в C#, класът трябва явно да разреши неяснотата, като реализира метода самостоятелно.