none
Konzeptionelle Frage zu Schnittstellen, Basisfunktionen, abstract class RRS feed

  • Frage

  • Hallo,

      konzeptionelle Frage zu Schnittstellen, Basisfunktionen etc.

    public abstract class MachineBase : IMACHINE
        {
              public virtual string Program()
            {
                string help;
          // diverse Basissachen  im Vorfeld          
    
    	       ///**** KUNDEN_PROGRAMM 
    		  
          // diverse Basissachen  im Nachhinein          
                return help;
            }
    
            public virtual string Finish()
            {
                string help;
          // diverse Basissachen   im Vorfeld              
    
    	    ///**** KUNDEN_PROGRAMM 
    		
    	   // diverse Basissachen  im Nachhinein      
                return help;
            }
    		
    		
    		 public class KUNDENMachineA : MachineBase
    		    public override string Program()
    		      // geht ja nicht, sonst müsste ich ja das Vor und Danach immer machen.
    		 
    	 	 public class KUNDENMachineB : MachineBase
    		 
    		 
    		 public class KUNDENMachineC : MachineBase
      Wenn jetzt KUNDENMachineA aktiv ist, soll die Basisfunktion aufgerufen werden,
       die immer gleich sind.
       Zwischendrin ändert sich etwas, je nach Kunde.
       Zum Schluß ist es wieder gleich.
      
       Wie kann ich das lösen?
      
       Viele Grüße Ulrich

     
    Mittwoch, 17. Februar 2016 17:44

Antworten

  • Hallo Ulrich,

    ich verstehe dein Problem nicht so richtig. Klassen können nicht "aktiv" sein. Wenn ich mal deine Beschreibung außen vor lasse und mir nur deine Kommentare im Code ansehe, dann suchst du vielleicht so etwas in der Art:

    public abstract class BaseClass
    { public void DoSomething() { ActionAtStart(); ActionFromChildClass(); ActionAtEnd(); } private void ActionAtStart()
    { Debug.WriteLine("BaseClass.ActionAtStart aufgerufen"); //... } private void ActionAtEnd()
    { Debug.WriteLine("BaseClass.ActionAtEnd aufgerufen"); //... } protected abstract void ActionFromChildClass();//Muss von Kind-Klasse überschrieben werden } public class ChildClass:BaseClass
    { protected override ActionFromChildClass()
    { Debug.WriteLine("ChildClass.ActionFromChildClass aufgerufen"); } }
    Wenn du nun ChildClass instanziierst und DoSomething aufrufst, wird zuerst ActionAtStart in der Basis-Klasse, dann ActionFroMChildClass in der Kind-Klasse und anschließend ActionAtEnd in der Basis-Klasse aufgerufen.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert Ulrich Stippe Donnerstag, 18. Februar 2016 17:29
    Mittwoch, 17. Februar 2016 18:01
    Moderator

Alle Antworten

  • Hallo Ulrich,

    ich verstehe dein Problem nicht so richtig. Klassen können nicht "aktiv" sein. Wenn ich mal deine Beschreibung außen vor lasse und mir nur deine Kommentare im Code ansehe, dann suchst du vielleicht so etwas in der Art:

    public abstract class BaseClass
    { public void DoSomething() { ActionAtStart(); ActionFromChildClass(); ActionAtEnd(); } private void ActionAtStart()
    { Debug.WriteLine("BaseClass.ActionAtStart aufgerufen"); //... } private void ActionAtEnd()
    { Debug.WriteLine("BaseClass.ActionAtEnd aufgerufen"); //... } protected abstract void ActionFromChildClass();//Muss von Kind-Klasse überschrieben werden } public class ChildClass:BaseClass
    { protected override ActionFromChildClass()
    { Debug.WriteLine("ChildClass.ActionFromChildClass aufgerufen"); } }
    Wenn du nun ChildClass instanziierst und DoSomething aufrufst, wird zuerst ActionAtStart in der Basis-Klasse, dann ActionFroMChildClass in der Kind-Klasse und anschließend ActionAtEnd in der Basis-Klasse aufgerufen.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert Ulrich Stippe Donnerstag, 18. Februar 2016 17:29
    Mittwoch, 17. Februar 2016 18:01
    Moderator
  • Hallo Tom,

    ja, ich denke Du hast mich verstanden.

    protected abstract void ActionFromChildClass();//Muss von Kind-Klasse überschrieben werden
    

    D.h. ich kann in der Basisklasse ChildFunktionen deklarieren und dann eine eigene Klasse machen.

    Ohne virtual eben dann.

    Ich lassen den Thread, dennoch offen, falls jemand noch was beitragen will.

    Ist aber, denke ich die Lösung.

     
      public void DoSomething()
      {
        ActionAtStart();
        ActionFromChildClass();
        ActionAtEnd();
      }

    ActionAtStart haben alle Erben gleich und das Ende.

    Danke für die schnelle Antwort.

    Viele Grüße Ulrich

    Mittwoch, 17. Februar 2016 18:12