Interface Member immer public und Member Initialisierung



  • Moin!

    Ich probier mich mal wieder an C# - Dazu zwei kleine Fragen:

    a) Wieso müssen alle Interface Methoden public sein? Ich habe z.B. ein Interface mit 5 public Methoden die eine Schnittstelle nach außen darstellen. Diesen möchte ich nun aber eine protected Methode mitgeben, die interne Verarbeitunsschritte der Schnittstelle abbildet und von außen nicht erreichbar sein soll - Geht nicht, aber wieso? Was sollte man hier stattdessen verwenden? Eine abstract class?

    b) Wo ist der Unterschied, ob ich einen Member während der Deklaration erstelle (b1), oder im Konstruktor (b2)? Ich beobachte hier beim Lesen einiger C# Tutorials jeweils beide Varianten, sehe aber keinen Unterschied.

    b1

    public class Test    
    {
        private Dingsbumms Horst = new Dingsbumms();      
    
        public Test()
        {
        }
    }
    

    b2

    public class Test    
    {
        private Dingsbumms Horst;      
    
        public Test()
        {
           Horst = new Dingsbumms();
        }
    }
    


  • a) Es ergibt keinen Sinn, den Interface implementierenden Klassen interne Details aufzuzwingen. Ein Interface ist ein Vertrag über die öffentliche Schnittstelle zwischen Implementierer und Client. Bitte zeig mal ein Beispiel, wo Du eine protected Methode in Interfaces für sinnvoll erachtest.

    Klassen gewisse Verarbeitungsschritte aufzuzwingen hört sich nach dem Template-Method-Muster an. Das ist aber nur sinnvoll wenn die (evtl. abstrakte) Basisklasse bereits Code beinhaltet. Ein Interface dagegen kann keinen Code beinhalten. Somit kann weder das Interface die überschriebene protected Methode aufrufen, noch könnte der Implementierer gezwungen werden, in irgendeiner Art und Weise, die protected Methoden zu verwenden.

    b) Im Beispiel gibt es keinen Unterschied. Feldinitialisierer können aber nicht auf andere nicht-statische Felder oder Methoden zugreifen. Falls das bei der Initialisierung notwendig ist, muss sie im Konstruktor stattfinden


Anmelden zum Antworten