Sobes.tech
Junior — Middle

Πώς πρέπει να ενεργήσετε αν σε μια τάξη δηλώνονται δύο διεπαφές που περιέχουν τις ίδιες ονομασίες μεθόδων;

sobes.tech AI

Απάντηση από AI

Αν σε μια κλάση υλοποιούνται δύο διεπαφές που περιέχουν μεθόδους με τα ίδια ονόματα και υπογραφές, τότε:

  • Αν οι μέθοδοι έχουν την ίδια υπογραφή και τύπο επιστροφής, αρκεί να υλοποιηθεί μία μέθοδος που ικανοποιεί και τις δύο διεπαφές.
  • Αν οι μέθοδοι με τα ίδια ονόματα έχουν διαφορετικές υπογραφές (π.χ. διαφορετικές παραμέτρους), τότε πρέπει να υλοποιηθούν και οι δύο μέθοδοι ξεχωριστά.
  • Αν οι διεπαφές περιέχουν μεθόδους με τα ίδια ονόματα και υπογραφές, αλλά με διαφορετικές προεπιλεγμένες υλοποιήσεις (default methods), τότε στη κλάση πρέπει να υπερισχύσετε ρητά αυτή τη μέθοδο και να δηλώσετε ποια υλοποίηση θα χρησιμοποιήσετε, ή να παρέχετε τη δική σας.

Παράδειγμα με σύγκρουση default methods:

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#, η κλάση πρέπει να επιλύσει ρητά την ασάφεια υλοποιώντας τη μέθοδο η ίδια.