2011-08-13 1 views

答えて

3

間違いですが、何も過負荷になっていません。あらかじめ焼かれたSub Main()はどこにもありません。特にHelloWorldというクラスにはありません。それはvb.netコンパイラがそれについて非常に不安ではないので動作します。このコードをクラスに貼り付けて自分自身で確認してください:

Class Test 
    Overloads Sub IdontOverloadAnything() 

    End Sub 
End Class 

VB.NETコンパイラは魔法を起こす傾向があります。これはそのようなケースの1つではなく、Main()マジックはCLRにあります。ほとんどのC#プログラマーはこれを言語のバグだと考えています。私は反対することはできません。

+0

だから、 'Shared Sub'だけで十分でしょうか? – BigOmega

+0

はい、パブリック共有サブ。 –

0

VB6では、ほとんどの「古代」のプログラミング言語と同様に、「1つしかありません」という格言がありました。 (映画「ハイランダー」を参照)。モジュールまたはクラスに同じ名前のFunctionまたはSubを1つだけ持つことができます。 VB.NETでは、C#のように、署名が異なる限り、同じ名前を持つ複数のメソッドを持つことができます。これは、異なる数のパラメータまたは異なるタイプのパラメータを持つ必要があることを意味します。これらの機能は、過負荷と言われています。 VBでは、オプションのキーワードOverloadsをそのような関数またはサブに追加できます。

Public Sub Test(s As String) 
Public Sub Test(i As Integer) 
Public Sub Test(s As String, i As Integer) 

これは問題ありません。しかし、

Public Sub Test(t As String) 

は、すでに1つの文字列パラメータでオーバーロードされたメソッドが存在するため、存在しません。異なるパラメータ名では不十分です。

0

標準のShared Sub Mainがあり、オーバーロードしているためです。過負荷を排除することができます。

2

標準のSub Mainにはパラメータがないため、overloadingにはパラメータ付きの新しいMainプロシージャがあります。

関連する問題