none
Zugriff auf Subklasse RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,
    ich habe Probleme mit dem Zugriff von einer Subklasse in die über gestellte Klasse. Kann mir bitte jemand anhand des unteren Beispiels das erklären oder mir einen praktischen Link geben.

    Das Ziel ist es von der Subklasse auf die Variable "strTest" zugreifen zu können.

    namespace Uebung03
    {
        public class Test
        {
            string strTest;
    
            public virtual void tester(string strUebergabe)
            {
                    strTest = strUebergabe;
            }
        }
    
        //Subklasse für einen Mandanten
        public class SubTest : Test
        {
    public override void tester() { /* * Hier auf die Variable "strTest" zugreifen
    */
    }
    }
    }
    Mfg Probelm_macher

    • Typ geändert Ciprian Bogdan Dienstag, 21. Januar 2014 17:35 keine Rückmeldung des Fragestellenden
    Samstag, 21. Dezember 2013 19:04

Alle Antworten

  • Hallo,
    du kannst nur auf Member der Basisklasse zugreifen die nicht private sind. Also wäre protected wahrscheinlich das angebrachteste:

    protected string strTest;

    Das protected-Schlüsselwort sorgt dafür, das auch die Basisklassen auf das Objekt zugreifen können.
    Siehe auch: Zugriffsmodifizierer (C#-Programmierhandbuch)

    Abseits deiner Frage, wenn du die tester-Methode überschreiben willst, dann muss diese die selben Parameter und den selben Rückgabetyp haben wie die Basis-Funktion. Also so hier:

    public override void tester(string strUebergabe)
    Siehe auch: override (C#-Referenz)


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Samstag, 21. Dezember 2013 19:19
    Moderator
  • Hi,

    wenn du auf strTest zugreifen willst musst du es als Protected deklarieren.

    Die 3 meisten Verwendeten Attribute für die Sichtbarkeit von Klassen/Methoden usw. sind public, protected und private.

    Grob.

    Public kann jeder sehen.

    Private nur die Klasse selbst.

    Protected auch Klassen die von der Klasse erben.

    Grundlegend solltest du immer die möglichst grinste "Sichtbarkeit" wählen (private).

    MFG

    Björn

    Samstag, 21. Dezember 2013 19:20
  • Hi,

    falls strTest aber private bleiben soll, dann müßtest Du den Rückgabetyp der Funktion von void in string ändern und strTest rückgeben lassen

    return (strTest);


    Anbei mal ein Bsp., wie unterschiedlich die Ergebnisse ausfallen können:
        public partial class Form1 : Form
            {
            public Form1()
                {
                InitializeComponent();
                }
    
            private void button1_Click(object sender, EventArgs e)
                {
                //Basisklassenaufruf
                   Test t = new Test();
                   t.tester("Ausgabe Test");
                //Subklassenaufruf
                   SubTest st = new SubTest();
                   st.tester("Ausgabe SubTest");
                }
            }
    
        public class Test
            {
            protected string strTest;
    
            public virtual void tester(string strUebergabe)
                {
                strTest = strUebergabe;
                MessageBox.Show(strTest + " aus der Klasse Test (Funktion: tester)");
                }
            }
    
        //Subklasse für einen Mandanten
        public class SubTest : Test
            {
            public override void tester(string was)
                {
                base.tester(was 
                    + " an Basis");
                //und hier der Effekt, der ja im Prinzip zum Überschreiben gewollt ist...
                MessageBox.Show(was 
                    + " aus der Klasse SubTest (überschriebene Funktion: tester)");
                MessageBox.Show(base.strTest 
                    + " aus der Klasse SubTest (überschriebene Funktion: tester)");
                }
            }
    

    • Bearbeitet Ralf A Samstag, 21. Dezember 2013 19:47
    Samstag, 21. Dezember 2013 19:36
  • *****************************************************************************************************

    Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.

    Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.

    *****************************************************************************************************


    Ciprian Bogdan, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-PrinzipEntwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.





    Dienstag, 21. Januar 2014 17:33