Entwickler-Ecke
C# - Die Sprache - Abstrakte Classen
goose - Mo 11.09.06 21:46
Titel: Abstrakte Classen
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
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 { public abstract class CLogging { string szLog; public void Add(string LogText) { szLog = szLog + LogText; } public void Clear() { szLog = ""; } public string LogInhalt() { return szLog; } public virtual void save() {} }
public class KonsoleLogging : CLogging { public override void save() { Console.WriteLine(LogInhalt()); } }
public class FileLogging : CLogging { public void Test() { Console.WriteLine("Test"); } } } |
cmain.cs
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(); 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. - 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:
C#-Quelltext
1:
| ((FileLogging)Flog).Test |
Grüße
Christian
goose - 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 :
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(); } }
public abstract class CBase { public void BaseMethode1() { Console.WriteLine("BaseMethode 1"); } public abstract void BaseAbstrakt(); } public class CAbgeleitet_von_Base: CBase { public override void BaseAbstrakt() { Console.WriteLine("Überschrieben Methode"); } public void Methode_in_Abgeleiteter_Klasse() { Console.WriteLine("Abgeleitete Methode"); } } } |
Ist das so richtig gemacht ?
Mir kommt das irgendwie so umständlich vor ?
Matthias
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!