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

本文关键字:参数 许类名 vb net 为什么 | 更新日期: 2023-09-27 18:05:59

我见过一个Sub是这样的:

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

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

例如,假设有一个Class命名为Bird,并且有一个像这样的对象

Dim bird = New Bird("Duck Doggers")

bird.fly()将确保Duck Doggers飞起来,然而,Bird.fly()将使所有的鸟都飞起来,例如,IEnumerable将在Bird的每次构造函数运行时更新,Bird.fly将迭代IEnumerable并为每个项目调用fly。据我所知,这在vb.net中是不可能的,因为fly要么是Shared,要么是实例级。如果参数名称与实例为上述参数的Class名称完全相同,是否有任何可能的问题(除了不清楚)?

我没有c#在我面前,但我想知道是否命名一个参数完全作为一个Class是可能的。

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

对于大多数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会得到如下输出:

从Shared

调用Fly

从Shared

调用Fly

从实例

调用庸医

从实例

调用庸医