Überschreiben von Klassen in c# und Zugriff auf eine virtuelle Methode, die verwendet eine Methode überschreiben

Arbeite ich mit überschreiben von Methoden in C# für das erste mal und ich denke ich habe ein gutes Verständnis der Grundlagen. Aber meine Methoden sind etwas komplexer und einige aufrufen von Methoden innerhalb von Methoden.

Bin ich im wesentlichen versucht mich zu retten-code schreiben, von der Suche nach einem Weg, um die Basis-Klasse Methode, aber Aufruf der überschriebenen Methode der Basisklasse Methode verwendet.

Hier ist ein Beispiel für mein problem, als könnte ich nicht erklären, es zu gut:

namespace exampleCode
{
    public class BaseClass : AnotherClass
    {
        public static string OrderStorageContainer = "Deliverables";

        public virtual string CustomerStorageContainer = "CustomerDocs";

        public virtual string GetSomething(typeStorage st, string FileName)
        {
            if (String.IsNullOrWhiteSpace(FileName))
            {
                throw new ArgumentNullException("FileName", "The filename of the file should be supplied!");
            }

            var c = GetReference(GetName(st));        
            return c.ToString();
        }
        public virtual string GetName(typeStorage st)
        {
            switch (st)
            {
                case typeStorage.CustomerProvided:
                    return CustomerStorageContainer.ToLower();
                case typeStorage.SystemGenerated:
                    return OrderStorageContainer.ToLower();
            }
            throw new InvalidOperationException("No container defined for storage type: " + st.ToString());
        }

        public virtual string GetReference()
        {
            //does stuff
        }
    }

    public class DervivedClass : BaseClass
    {
        public static string QuoteStorageContainer = "QuoteDeliverables";

        public override string CustomerStorageContainer = "QuoteCustomerDocs";

        public override string GetSomething(typeStorage st, string FileName)
        {
            if (String.IsNullOrWhiteSpace(FileName))
            {
                throw new ArgumentNullException("FileName", "The filename of the file should be supplied!");
            }

            var c = GetReference(GetName(st));        
            return c.ToString();
        }

        public override string GetName(typeStorage st)
        {
            switch (st)
            {
                case typeStorage.CustomerProvided:
                    return CustomerStorageContainer.ToLower();
                case typeStorage.SystemGenerated:
                    return QuoteStorageContainer.ToLower();
            }
            throw new InvalidOperationException("No container defined for storage type: " + st.ToString());
        }

    }
}

Grundsätzlich möchte ich der Abgeleiteten Klasse verwenden Sie die überschreiben-GetSomething-Methode. Allerdings möchte ich es zum Aufruf der Basisklasse GetReference() Methode mit dem Ergebnis aus den überschriebenen GetName() Methode.

Ist dies die richtige Richtung? Ich habe es schwierig gefunden, zu finden, ein ähnliches Beispiel online.

Jegliche Hinweise wären toll!

Sieht mir Recht sein, solange Sie nicht überschreiben die GetReference Methode Sie rufen die Basis. Wenn Sie überschreiben, können Sie immer noch verwenden base.GetReference().

InformationsquelleAutor m_wilson | 2016-04-19

Schreibe einen Kommentar