2016-07-10 14 views
0

Schaffung Ich habe folgendes Szenario:Override-Funktion ohne neuen Klasse C#

public abstract class SomeClass 
{ 
    public virtual Foo() 
    { 
     //do stuff 
    } 
} 

und ich habe diese Klasse in einer anderen Klasse gespeichert

SomeClass InstanceOfTheClass { get; set; } 

Wie kann ich Foo von SomeClass nur die Funktion außer Kraft setzen, ohne Erstellen einer neuen Klasse, die von SomeClass erbt und dann die Funktion überschreibt?

Antwort

1

Kein Weg.

Das virtuelle Schlüsselwort wird verwendet, um eine Methode, eine Eigenschaft, einen Indexer oder eine Ereignisdeklaration zu ändern und es in einer abgeleiteten Klasse zu überschreiben.

Außerdem SomeClass ist abstrakt, würden Sie nicht in der Lage sein, eine Instanz davon sowieso =/

0

erstellen Wenn es nur das Verhalten, das Sie kopieren möchten, können Sie eine Schnittstelle IFoo und implementieren definieren das in deiner Klasse.

+0

Können Sie ein Beispiel geben? Ich bin ziemlich sicher danach werde ich in der gleichen Situation enden .. – PreqlSusSpermaOhranitel

+1

Wie von @Renato Medeiros erwähnt, ist es nicht möglich, ohne eine abgeleitete Klasse zu überschreiben. So abstrahiere das Foo-Verhalten in eine Schnittstelle IFoo. Sie können IFoo dann dort implementieren, wo Sie "eine andere Klasse" erwähnt haben. Auf diese Weise müssen Sie keine konkrete Klasse für die abstrakte erstellen (ich meine, die abstrakte Klasse ist nicht im Bild). Hoffentlich hilft es, aber wenn nicht, bitte etwas Kontext angeben. –

+0

Vereinbart mit @Anwar Husain hinsichtlich der Verwendung von Schnittstellen. Wenn Sie das konkrete Problem näher erläutern können, können Sie vielleicht eine detaillierte Antwort geben. –