Ich habe über die folgende Zeile in einer VB6-Anwendung ausgeführt.Was bedeutet "Shift: =" in diesem VB6-Code?
Leider waren Google und andere Suchmaschinen nicht sehr nützlich, da sie anscheinend den: = Teil weglassen.
Was wäre ein C# -Aquivalent?
Ich habe über die folgende Zeile in einer VB6-Anwendung ausgeführt.Was bedeutet "Shift: =" in diesem VB6-Code?
Leider waren Google und andere Suchmaschinen nicht sehr nützlich, da sie anscheinend den: = Teil weglassen.
Was wäre ein C# -Aquivalent?
Dies ist Visual Basic-Syntax für optionale benannte Parameter. Die Insert
-Funktion hat einen Parameter namens Shift
, der angegeben wird.
C#, soweit ich weiß, hat keine Entsprechung für optionale benannte Parameter. Stattdessen müssen Sie die Methode Insert
aufrufen und Type.Missing
für alle anderen Parameter als Shift
angeben.
Siehe dazu auch die folgende Frage Stackoverflow: VB.NET := Operator
UPDATE (2008-10-29):
C# 4.0 wird Parameter optional und Namen einzuführen. Siehe hierzu blog entry on codebetter.com.
VB6 und VB.net hat optionale Parameter in der Methode. C# hat die Option, die Methode zu überladen.
VB6/VB.net Art zu sagen Shift: = xlToRight ermöglicht den Wert eines bestimmten Parameters nach Namen zu übergeben.
z.B. Public Sub mymethod (optional ein als integer = -1, optional b als ganze Zahl = 1) ... End Sub
I diese Methode mit mymethod nennen kann (b: = 10)
für C# , könnte es zwei Methoden für diese
void Shift()
{
defaultDirection = directionEnum.Left;
Shift(defaultDirection);
}
void Shift(directionEnum direction)
{
}
1 weitere Sache sein. Obwohl Sie die Methode nur aufrufen können, indem Sie Parameter übergeben, macht das Hinzufügen des Parameternamens beim Aufruf den Code etwas lesbarer.
z.B. DoSomethingWithData (CustomerData: = Kunde, SortDirection: = Aufsteigend)
Hoffe, dass hilft.
Es geht wirklich um Excel und wie es mit Einsätzen umgeht. Wenn Sie einen Zellenbereich auswählen und mit der rechten Maustaste auf Einfügen klicken, werden Sie gefragt, in welche Richtung die Zellen verschoben werden sollen. Dies ist aus der Excel-Hilfe:
=======
Insert-Methode auf Range-Objekt
Fügt eine Zelle oder einen Bereich von Zellen in das Arbeitsblatt oder Makroblatt und verschiebt andere Zellen entfernt Raum schaffen.
expression.Insert (Shift, CopyOrigin)
Ausdruck Erforderlich. Ein Ausdruck, der ein Range-Objekt zurückgibt.
Optionale Schiebevariante.Gibt an, auf welche Weise die Zellen verschoben werden sollen. Kann eine der folgenden XlInsertShiftDirection-Konstanten sein: xlShiftToRight oder xlShiftDown. Wenn dieses Argument nicht angegeben wird, entscheidet Microsoft Excel basierend auf der Form des Bereichs.
CopyOrigin Optionale Variante. Der Ursprung der Kopie.
===========
Wenn Sie nicht die Konstanten definiert haben Sie die folgenden Zahlen subsitute können
xlShiftDown: -4121 xlShiftToLeft: -4159 xlShiftToRight: -4161 xlShiftUp: -4162
Nur um John Rudys Antwort zu klären.
Das Sytax ist optional (kleines 'o'), was bedeutet, dass Sie es nicht verwenden müssen. Meiner Erfahrung nach verwenden die meisten VB6-Codierer die Syntax nicht und bevorzugen stattdessen normale unbenannte Parameter.
Wenn Sie sich für die Verwendung entscheiden, müssen alle nachfolgenden Parameter im Unterprozeduraufruf benannt werden.
Die Syntax des benannten Parameters kann für alle Parameter verwendet werden, unabhängig davon, ob das entsprechende Argument mit dem VBA-Schlüsselwort Optional
(Großbuchstabe 'O') deklariert wurde. Betrachten wir zum Beispiel das (leicht bekloppt) VBA-Funktion mit zwei Parametern, eine erforderlich und ein Optional
:
Private Function TimesTen(_
ByVal Value As Long, _
Optional ByVal Factor As Long = 10 _
) As Long
TimesTen = Value * Factor
End Function
In VBA ich anrufen kann es benannte Parameter für den erforderlichen Parameter verwendet (die Optional
Paramter kann einfach sein in VBA, anders als in C# .NET verzichtet, für die Type.Missing
für alle weggelassen Optional
Parameter verwendet werden müssen):
MsgBox TimesTen(Value:=9)
Wenn ich es mit den Parametern in der ‚falschen‘ bestellen (warum ??) ich anrufen wollte kann dies mit benannten Parametern erreichen:
MsgBox TimesTen(Factor:=11, Value:=9)
Der Versuch, einen regelmäßigen ‚unbenannte‘ Parameteraufruf nach einer benannten man verwenden verursacht einen Compiler-Fehler:
MsgBox TimesTen(Value:=9, 11)
Warum also VBA-Programmierer verwenden benannte Parameter, wenn VB6 Programmierer selten tun, auch wenn sie verwenden im Wesentlichen die gleiche Sprache? Ich denke, es liegt daran, dass der VBA, der vom Makrorekorder der MS Office-Anwendungen generiert wird, dazu neigt, (immer?) Benannte Parameter zu generieren, und viele VBA-Programmierer lernen, wie sie programmieren.
Es ist eine Schande, dass dies nicht mehr aufgewertet wird. Ich gab Ihnen +1 für die zusätzlichen Informationen. –
Danke für die zusätzliche Information! –
ja das ist eine sehr interessante antwort. Ich habe gerade entdeckt: = in irgendeinem vb6-Code und fragte mich, was die Delphi-Syntax dort tat. Jetzt weiß ich! – kjack
Danke, der Shift-Teil ließ mich denken, dass es eine Art von Sprachfunktion war, dachte nicht daran, die Methodenparameter zu betrachten. –
Kein Problem. :) –
"Null für alle Parameter angeben" - eigentlich sollten Sie Type.Missing für fehlende optionale Parameter angeben. – Joe