私はこのように見えたSub
を見てきました:なぜvb.netはクラス名をパラメータ名にすることができますか?
Private Sub DoSomething(ByRef PlaceHolder As PlaceHolder)
'Do something with the PlaceHolder object
End Sub
これが許可されている理由は、私は疑問に思います。私はこれが許されないところでいくつかの言語を挙げることができます。私は非常に同じ戻り値、パラメータと名前を持つメソッドを持つことができるようにしたいと考えています。そのうちの1つがShared
で、もう1つがインスタンスレベルです。例えば
、私たちはBird
という名前Class
があるとする場合は、この
Dim bird = New Bird("Duck Doggers")
bird.fly()
のような物体が、しかし、Bird.fly()
は、すべての鳥が飛ぶになるだろう、ダックDoggersが飛ぶことを確認してくださいだろうがあるとしましょう例えば、IEnumerable
は、各コンストラクタの実行時にBird
およびBird.fly
に更新され、IEnumerable
を反復し、各項目に対してfly
とコールします。限り、私は見ることができます、これはvb.netで不可能です、フライはShared
またはインスタンスレベルのいずれかになるでしょう。パラメータ名が、そのインスタンスが上記のパラメータであるClass
の名前とまったく同じであれば、(unclarity以外に)問題はありますか?
私の前にC#はありませんが、パラメータの名前を正確にClass
とすることが可能かどうかは疑問です。
から呼び出されます。静的メソッドとインスタンスメソッドに同じ名前を使用することは、パラメータ名とは関係なく、とにかく醜いデザインです。すべてのインスタンスを見つけるために 'fly()'はどこに行きますか?リストを使用してすべてのインスタンスを格納するだけで、メモリリークが保証されます。コンストラクタがスローすればどうなりますか? –
VBでは、インスタンスメンバと競合する共有メンバを呼び出す必要がある場合は、クラス名を名前空間で修飾するだけです。競合がない場合、共有メンバへの呼び出しは、インスタンスメンバを共有メンバに「渡し」ます。 –
@ PanagiotisKanavos、実際には、パラメータ名とクラス名が一致する可能性がある問題を分析しています。あなたのパラメータがByRef Bird As Birdで、Bird.flyに電話したらどうでしょうか? –