为什么VB.net和C#之间的行为有所不同?

为什么VB.net和C#之间的行为有所不同?,c#,vb.net,C#,Vb.net,至于我可以告诉你,以下两个例子在功能上是相同的 C# VB.net Option Strict On Module Module1 Sub Main() Dim x=New Example(12) Dim y = New Example(34) Dim z= Example.Examples.One End Sub End Module Public Class Example Public Class Examples Publ

至于我可以告诉你,以下两个例子在功能上是相同的

C#

VB.net

Option Strict On
Module Module1

    Sub Main()

    Dim x=New Example(12)
    Dim y = New Example(34)
    Dim z=  Example.Examples.One
    End Sub

End Module

Public Class Example

  Public  Class Examples
    Public Shared ReadOnly Zero As Example
    Public Shared ReadOnly One As Example
    Public Shared ReadOnly Two As Example
    Public Shared ReadOnly MinusOne As Example
    Shared Sub new()
      Zero=New Example(0)
      One= New Example(1)
      Two = New Example(2)
      MinusOne = New Example(-1)
    End Sub
  End Class
  Public ReadOnly Value As Double
  Public Sub New(Value As Double)
    Me.Value=Value
  End Sub
  Public Shared Function Add(x As Example,y As Example) As Example
    Return New Example(x.Value+y.Value)
  End Function
End Class
那么,为什么我只能在C#中的点之后得到实例方法(见下文)

在VB.net中

Dim z = Example.Examples.One.
我还得到了
示例


发生了什么事?为什么会有差异?

出于兼容性原因,VB.Net允许您通过实例限定符访问
共享的
静态的
)方法。

不要这样做;这令人困惑。

这是一个关于运行时行为或Visual Studio Intellisense的问题吗?我认为Slaks猜对了,但这个问题没有说明问题的关键。它也太长了。@Kal_Torak也可能是,因为我不知道为什么。这就是我问的原因。@Henk Holterman太久了?我提供了两个不同语言的代码示例,因此用户可以复制我的代码,并看到我遇到的“问题”。堆栈溢出不能双向进行。问题太短,问题太长,没有提供代码。(为什么评论不保留换行符,你可以在评论上输入可写的版本。但保存时会删除它们。)@HenkHolterman据我所知,Adam或多或少都在遵循SO。是的,我知道这很混乱。谁能提供一个兼容性的例子,因为我记得在vb6中你们不能定义类。在vb6中你们可以定义类-它们包含在.cls文件中。它也有20年的历史了。人们不断提到的这种神秘的兼容性是什么。提供指向我可以查看和研究的文档的链接。我甚至不认为我现在拥有一台可以运行vb6 IDE的机器。但这并不是出于兼容性的原因。VB6根本不允许在类上使用共享(静态)方法@亚当在这里。VB6 IDE在Win7 64位上工作。VB6已经有15年的历史了(1998年发布)。@MarkJ感谢您提供的资源链接。VB首次出现于1991年(因此21岁)。SLaks说这是为了兼容性。我正试图确定这是什么原因。
z = Example.Examples.One.
Dim z = Example.Examples.One.