C# Override mit verschiedenen Parametern?
Hier ist ein Beispiel, was ich Suche zu tun.
public class A
{
public virtual void DoSomething(string a)
{
//perform something
}
}
public class B : A
{
public Override void DoSomething(string a, string b)
{
//perform something slightly different using both strings
}
}
So, ich möchte überschreiben DoSomething der Klasse A und erlauben die übergabe eines zweiten Parameters an. Ist das möglich?
Nein, es ist nicht überschreiben. Es ist überladen.
Sie erstellen eine zweite überladung der ersten Methode. Sie deklarieren es als
Einfach Unmöglich! Die überschreibende Methode muss die gleiche Signatur.
Wenn es möglich wäre, was würden Sie erwarten, dass dieser code zu tun?
Sie erstellen eine zweite überladung der ersten Methode. Sie deklarieren es als
virtual
wenn Sie möchten, dass es überschrieben wird in abgeleiteten Klassen ist es aber nicht überschreiben alles selbst.Einfach Unmöglich! Die überschreibende Methode muss die gleiche Signatur.
Wenn es möglich wäre, was würden Sie erwarten, dass dieser code zu tun?
A a = new B(); a.DoSomething("");
Was sollte der zweite parameter übergeben B.DoSomething
? Macht keinen Sinn für mich.InformationsquelleAutor Qinusty | 2014-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim überschreiben einer
virtual
- Methode, müssen Sie halten Sie die original - "Vertrag" von der Methode, die in Ihrem Fall ist einestring a
variable.Um das zu tun, was Sie möchten, können Sie erstellen eine virtuelle überlastung nimmt zwei strings:
Wenn das, was Sie wollen, ist zu akzeptieren N strings in der Methode, die Sie verwenden können, die
params
Stichwort:InformationsquelleAutor Yuval Itzchakov
Nein, das funktioniert nicht. Wenn Sie die Methoden überschreiben muss, um die gleiche Prototyp.
Sie sollten nur die Definition der neuen Methode in der zweiten Klasse (ich meine in der Klasse B). Diese neue Methode hat zwei Parameter, und dann diese neue Methode kann den Aufruf der original-Methode, auf diese Weise: base.DoSometing("..."); Methoden in abgeleiteten Klassen können Methoden aufrufen, die von Ihren Basis-Klassen mit base.<MethodName>. Auf diese Weise können Sie den vorhandenen code wiederverwenden zu einem gewissen Grad.
InformationsquelleAutor msporek
Nein, das wäre zu überladen. Da die Logik wäre 'etwas anderes', es klingt wie Sie benötigen zwei verschiedene Methoden überhaupt? Sie könnte Ihre ähnliche Logik in einer 3. Methode und rufe diese von beiden
DoSomething(string A)
undDoSomething(string A, string B)
InformationsquelleAutor nka
Leichte necro, aber bei überlastung können Sie den Aufruf der original-Methode von der neuen.
so
Dies ermöglicht Ihnen, ändern Sie die Methode nicht vollständig, es wiederholen 🙂
InformationsquelleAutor Rarceth