2008-10-22 11 views

Antwort

14

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.

+0

Danke, der Shift-Teil ließ mich denken, dass es eine Art von Sprachfunktion war, dachte nicht daran, die Methodenparameter zu betrachten. –

+0

Kein Problem. :) –

+0

"Null für alle Parameter angeben" - eigentlich sollten Sie Type.Missing für fehlende optionale Parameter angeben. – Joe

2

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.

1

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

8

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.

+0

Es ist eine Schande, dass dies nicht mehr aufgewertet wird. Ich gab Ihnen +1 für die zusätzlichen Informationen. –

+0

Danke für die zusätzliche Information! –

+0

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