Prima cosa prima. Spero che il mio titolo non sia fuorviante. Ho fatto del mio meglio per esprimerlo.Inherit Class1 e implementare Interface1 sia nel caso in cui Class1 implementa già Interface1
Ora, vedere il codice qui sotto. Il caso 1 è piuttosto semplice. Entrambi i casi funzionano come previsto. La mia domanda è: perché il compilatore consente il caso 2? Ci sono scenari specifici quando ciò è desiderato. Non riesco a pensare a uno.
interface IEmployee
{
void Register(string role);
}
abstract class Employee : IEmployee
{
public void Register(string role)
{
Console.WriteLine(role);
}
}
// Case 1
class Manager : Employee
{
}
// Case 2
class Developer : Employee, IEmployee
{
}
class Test
{
public void Test1()
{
IEmployee emp1 = new Manager();
emp1.Register("manager"); // output "manager"
IEmployee emp2 = new Developer();
emp2.Register("developer"); // output "developer"
}
}
Quando si sta ereditando da Employee vostro già eredita da IEmployee perché Employee eredita da IEmployee, appena Eredita da Dipendente o IEmployee invece di entrambi. Questo risponde alla tua domanda o stai chiedendo perché funziona? – CalebB
@ CalebB So già cosa hai spiegato. La domanda è: perché il caso 2 è permesso a tutti? Esistono casi d'uso per tale progettazione? – niksofteng
È consentito perché IEmployee viene implementato tramite l'ereditarietà di Employee che implementa tutti i membri IEmployee necessari. Non è necessario fare quanto so perché è possibile dichiarare esplicitamente IEmployee. per l'implementazione del membro nella classe Developer tramite l'ereditarietà di Employee. – CalebB