为什么vb.net允许类名作为参数名?

时间:2016-09-07 13:37:18

标签: c# vb.net oop

我看到Sub看起来像这样:

Private Sub DoSomething(ByRef PlaceHolder As PlaceHolder)
    'Do something with the PlaceHolder object
End Sub

我想知道为什么这是允许的。我可以命名一些不允许的语言。如果其中一个是Shared,另一个是实例级,我希望能够使用具有相同返回值,参数和名称的方法。

例如,我们假设有一个名为Class的{​​{1}},并且有一个像这样的对象

Bird

Dim bird = New Bird("Duck Doggers") 会确保Duck Doggers飞行,但是,bird.fly()会让所有的鸟都飞,如果例如Bird.fly()将在IEnumerable的每个构造函数运行时更新1}}和Bird将迭代Bird.fly并为每个项目调用IEnumerable。据我所知,这在vb.net中是不可能的,因为fly可以是fly或实例级。如果参数名称与其实例为所述参数的Shared名称非常相同,是否存在任何可能的问题(除了不清晰)?

我面前没有C#,但我想知道是否可以将参数命名为Class

1 个答案:

答案 0 :(得分:3)

对于大多数VB开发人员来说,这是一种非常常见的命名模式。其中很大一部分源于VB不区分大小写。不允许以这种方式命名变量,无论是变量还是类名都必须“创造性地”重命名以避免冲突,这只会导致匈牙利表示法或其他奇怪的命名模式。虽然对于不习惯它的人来说可能看起来很奇怪,但它很快成为VB开发人员的第二天性。在实例变量上调用shared成员只是“通过”到共享成员,如下例所示。

Public Class Bird
    public Shared sub Fly
        Debug.WriteLine("Fly called from Shared")
    End sub

    public sub Quack
        Debug.WriteLine("Quack called from Instance")
    End sub

End Class

Public Class Main
    public sub Test(bird As Bird)
        bird.Fly()
        Bird.Fly()

        bird.Quack()
        Bird.Quack()
    End sub
End Class

调用Test会产生以下输出。

  

Fly从共享

调用      

Fly从共享

调用      

来自Instance的Quack

     

来自Instance的Quack