Optionale Parameter für Schnittstellen
Verwendung von c# 4.0-Aufbau einer Schnittstelle und einer Klasse, die die Schnittstelle implementiert. Ich will erklären einen optionalen parameter in der Schnittstelle und haben es sich in der Klasse. Also, ich habe Folgendes:
public interface IFoo
{
void Bar(int i, int j=0);
}
public class Foo
{
void Bar(int i, int j=0) { //do stuff }
}
Diese kompiliert, aber es sieht nicht richtig aus. Das interface muss der optionale Parameter, weil es sonst spiegelt nicht richtig in der Schnittstelle Signatur der Methode.
Sollte ich überspringen Sie die optionalen parameter und benutzen Sie einfach eine nullable-Typ? Oder wird das so funktionieren wie Sie sollen ohne Nebenwirkungen oder Folgen?
InformationsquelleAutor der Frage bryanjonker | 2010-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man das pre-optionale-Parameter alternative:
Wenn Sie nicht wie das Aussehen der eine neue Sprache-Funktion, die Sie nicht haben, um es zu verwenden.
InformationsquelleAutor der Antwort pdr
Was ist wirklich seltsam ist, dass der Wert, den Sie setzen Sie für den optionalen parameter in der Schnittstelle tatsächlich einen Unterschied macht. Ich nehme an, Sie haben die Frage, ob der Wert eine Schnittstelle detail oder eine Implementierung detail. Hätte ich gesagt, das letztere aber die Dinge Verhalten sich ähnlich wie die früheren. Der folgende code gibt 1 0 2 5 3 7 zum Beispiel.
Was irgendwie interessant ist, ist, dass wenn Ihre Schnittstelle lässt sich ein parameter optional ist die Klasse die es nicht haben, das gleiche zu tun:
Dem, was scheint, ein Fehler jedoch ist, dass, wenn Sie die Schnittstelle implementieren, die explizit den Wert, den Sie geben in der Klasse für die optionale Wert ist sinnlos. Wie im folgenden Beispiel könnten Sie den Wert 9? Dies bedeutet nicht, geben sogar eine Warnung beim kompilieren.
InformationsquelleAutor der Antwort Martin Brown
Was ist mit sowas?
InformationsquelleAutor der Antwort Dave
Sie nicht haben, um die parameter, die optional in der Implementierung. Ihr code machen etwas mehr Sinn, dann:
Diese Weise, es ist eindeutig, was der default Wert ist. In der Tat, ich bin ziemlich sicher, dass der Standardwert in der Implementierung wird keine Wirkung haben, da das interface stellt einen Standard für die it.
InformationsquelleAutor der Antwort Tor Haugen
Die Sache zu prüfen, ist, was passiert, wenn Mocking-frameworks verwendet werden, die basierend auf der Reflexion von der Oberfläche.
Wenn der optionale Parameter definiert die Schnittstelle, Standard-Wert übergeben werden würde, basierend auf was ist in der Schnittstelle deklariert sind.
Ein Problem ist, dass es gibt nichts stoppen Sie von der Einstellung der verschiedenen optionalen Werte auf die definition.
InformationsquelleAutor der Antwort Hitesh
Sieht beiseite, das wird genau das tun, was es klingt wie, die Sie erreichen möchten.
InformationsquelleAutor der Antwort MojoFilter