我看到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
。
答案 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