Vb.net-subs
VB.Net-サブ手順
前の章で述べたように、Subプロシージャは値を返さないプロシージャです。 すべての例でSubプロシージャMainを使用しています。 これらのチュートリアルでは、これまでにコンソールアプリケーションを作成しています。 これらのアプリケーションが起動すると、コントロールはMain Subプロシージャに進み、プログラムの本体を構成する他のステートメントを実行します。
サブプロシージャの定義
*Sub* ステートメントは、サブプロシージャの名前、パラメーター、および本体を宣言するために使用されます。 Subステートメントの構文は次のとおりです-
[Modifiers] Sub SubName [(ParameterList)]
[Statements]
End Sub
どこで、
- Modifiers -プロシージャのアクセスレベルを指定します。可能な値は-Public、Private、Protected、Friend、Protected Friend、およびオーバーロード、オーバーライド、共有、シャドウイングに関する情報です。
- SubName -Subの名前を示します
- ParameterList -パラメータのリストを指定します
例
次の例は、2つのパラメータ_hours_および_wages_を取り、従業員の合計給与を表示するSubプロシージャ_CalculatePay_を示しています-
Module mysub
Sub CalculatePay(ByRef hours As Double, ByRef wage As Decimal)
'local variable declaration
Dim pay As Double
pay = hours * wage
Console.WriteLine("Total Pay: {0:C}", pay)
End Sub
Sub Main()
'calling the CalculatePay Sub Procedure
CalculatePay(25, 10)
CalculatePay(40, 20)
CalculatePay(30, 27.5)
Console.ReadLine()
End Sub
End Module
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Total Pay: $250.00
Total Pay: $800.00
Total Pay: $825.00
値でパラメーターを渡す
これは、パラメーターをメソッドに渡すためのデフォルトのメカニズムです。 このメカニズムでは、メソッドが呼び出されると、値パラメーターごとに新しい保存場所が作成されます。 実際のパラメーターの値がそれらにコピーされます。 そのため、メソッド内のパラメーターに加えられた変更は、引数に影響しません。
VB.Netでは、 ByVal キーワードを使用して参照パラメーターを宣言します。 次の例は、概念を示しています-
Module paramByval
Sub swap(ByVal x As Integer, ByVal y As Integer)
Dim temp As Integer
temp = x ' save the value of x
x = y ' put y into x
y = temp 'put temp into y
End Sub
Sub Main()
' local variable definition
Dim a As Integer = 100
Dim b As Integer = 200
Console.WriteLine("Before swap, value of a : {0}", a)
Console.WriteLine("Before swap, value of b : {0}", b)
' calling a function to swap the values '
swap(a, b)
Console.WriteLine("After swap, value of a : {0}", a)
Console.WriteLine("After swap, value of b : {0}", b)
Console.ReadLine()
End Sub
End Module
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
After swap, value of b :200
関数内で値が変更されていても、値に変更がないことを示しています。
参照によるパラメーターの受け渡し
参照パラメーターは、変数のメモリー位置への参照です。 値パラメータとは異なり、参照渡しでパラメータを渡すと、これらのパラメータに新しい格納場所は作成されません。 参照パラメータは、メソッドに提供される実際のパラメータと同じメモリ位置を表します。
VB.Netでは、 ByRef キーワードを使用して参照パラメーターを宣言します。 次の例はこれを示しています-
Module paramByref
Sub swap(ByRef x As Integer, ByRef y As Integer)
Dim temp As Integer
temp = x ' save the value of x
x = y ' put y into x
y = temp 'put temp into y
End Sub
Sub Main()
' local variable definition
Dim a As Integer = 100
Dim b As Integer = 200
Console.WriteLine("Before swap, value of a : {0}", a)
Console.WriteLine("Before swap, value of b : {0}", b)
' calling a function to swap the values '
swap(a, b)
Console.WriteLine("After swap, value of a : {0}", a)
Console.WriteLine("After swap, value of b : {0}", b)
Console.ReadLine()
End Sub
End Module
上記のコードをコンパイルして実行すると、次の結果が生成されます-
Before swap, value of a : 100
Before swap, value of b : 200
After swap, value of a : 200
After swap, value of b : 100