Autor Beitrag
goose
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Mo 11.09.06 21:46 
Hallo,

ich beginne gerade mich mit C# zu beschäftgen, bin also absoluter Anfänger und hab so einige schwierigkeiten.
Ich arbeite gerade so ein Buch durch, nennt sich Einstieg in Visual C# 2005 vom Master Verlag.

Also ich versteh nicht ganz warum folgendes nicht geht :

clogging.cs

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
namespace AbstrakteKlassen
{
  // Grunlegende Klasse
  public abstract class CLogging
  {
    string szLog;
    // Text dem Log hinzufügen
    public void Add(string LogText)
    {
      szLog = szLog + LogText;
    }
    // log löschen
    public void Clear()
    {
      szLog = "";
    }
    // Log Inhalt zurückgeben
    public string LogInhalt()
    {
      return szLog;
    }
    // Diese Methode muss überschrieben werden
    public virtual void save()
      {}
  }

  // Klasse für konsole logging
  public class KonsoleLogging : CLogging
  {
    public override void save()
    {
      Console.WriteLine(LogInhalt());
    }
  }

  // Klasse für DateiLogging
  public class FileLogging : CLogging
  {
    public void Test()
    {
      Console.WriteLine("Test");
    }
  }
}


cmain.cs

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
namespace AbstrakteKlassen
{
  class CMain
  {
    static void Main()
    {
      CLogging FLog = new FileLogging();
      FLog.Test();   //<========================== Hier, warum geht das nicht ??????? =======================

      Console.ReadLine();
    }
  }
}



ich glaube das ist jedem klar worum es hier geht.
Eine abstrakte klasse CLogging und davon abgeleitet FileLogging mit der Methode Test().
Aber warum kann ich nicht auf die Methode zugreifen ?

Matthias
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 11.09.06 22:07 
Hallo!

Flog hast Du ja als Clogging deklariert. Damit kannst Du auch (falls Du nicht castest) nur die Methoden benutzen, die in der Klasse CLogging "bekannt" sind. Und das ist Test nunmal nicht. Du kannst Test aber, da Du Flog als FileLogging instanziert hast, über den Umweg eines Casts aufrufen:

ausblenden C#-Quelltext
1:
((FileLogging)Flog).Test					


Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
goose Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Mo 11.09.06 22:34 
Hallo,

ich danke Dir für die Antwort obwohl ich das so ohne Erklärung nicht verstanden habe.
Ich hab jetzt gefummelt und gefummelt und glaube ich habs jetzt :

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
using System;
using System.Collections.Generic;
using System.Text;

namespace Abstract
{
  class CMain
  {
    static void Main(string[] args)
    {
      CBase Base = new CAbgeleitet_von_Base();
      CAbgeleitet_von_Base Abgeleitet = new CAbgeleitet_von_Base();

      Base.BaseMethode1();
      Base.BaseAbstrakt();

      Abgeleitet.Methode_in_Abgeleiteter_Klasse();


      Console.ReadLine();
    }
  }

  
  // Grundlegende Klasse
  public abstract class CBase
  {
    // Methode 1
    public void BaseMethode1()
    {
      Console.WriteLine("BaseMethode 1");
    }
    // Abstrakte Methode die überschrieben wird
    public abstract void BaseAbstrakt();
  }
  
  // von Base Abgeleitete Klasse soll alles von Base Klasse erben
  // und erweitert werden
  public class CAbgeleitet_von_Base: CBase
  {
    // Überschriebene Methode der Base Klasse
    public override void BaseAbstrakt()
    {
      Console.WriteLine("Überschrieben Methode");
    }
    
    // Kann ich hier nicht die Abgeleitete Klasse erweitern ???? 
    public void Methode_in_Abgeleiteter_Klasse()
    {
      Console.WriteLine("Abgeleitete Methode");
    }
  }
}


Ist das so richtig gemacht ?
Mir kommt das irgendwie so umständlich vor ?

Matthias