Junior — Middle
Kaip reikėtų elgtis, jei klasėje yra paskelbti du sąsajos, kurios turi vienodus metodų pavadinimus?
sobes.tech AI
Atsakymas iš AI
Jei klasėje įgyvendinami du sąsajos, turinčios metodus su tais pačiais pavadinimais ir parašais, tada:
- Jei metodai turi tą pačią parašą ir grąžinimo tipą, pakanka įgyvendinti vieną metodą, kuris patenkins abu sąsajos.
- Jei metodai su tais pačiais pavadinimais turi skirtingas parašas (pavyzdžiui, skirtingus parametrus), tada reikia įgyvendinti abu metodus atskirai.
- Jei sąsajos turi metodus su tais pačiais pavadinimais ir parašais, bet su skirtingomis numatytomis (default) įgyvendinimais, tada klasėje reikia aiškiai perrašyti šį metodą ir nurodyti, kurį įgyvendinimą naudoti, arba pateikti savo.
Pavyzdys su konfliktu default metodais:
interface IFirst {
void Method() => Console.WriteLine("First");
}
interface ISecond {
void Method() => Console.WriteLine("Second");
}
class MyClass : IFirst, ISecond {
public void Method() {
// Aiškiai pasirenkame įgyvendinimą
((IFirst)this).Method();
// arba savo
Console.WriteLine("MyClass Method");
}
}
Todėl, jei skirtingų sąsajų metodų pavadinimai sutampa, klasė turi aiškiai išspręsti neapibrėžtumą ir įgyvendinti metodą pati.