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

Ada*_*ght 2 c# vb.net

至于我可以告诉以下两个例子在功能方面是相同的.

C#

namespace ConsoleApplication4
{
 class Program
 {
  static void Main(string[] args)
  {
   var x = new Example(12);
   var y = new Example(34);
   var z = Example.Examples.One;
  }
 }
 class Example
 {
  public static class Examples
  {
   public static readonly Example Zero = new Example(0);
   public static readonly Example One = new Example(1);
  }
  public readonly Double Value;
  public Example(Double Value)
  {
   this.Value = Value;
  }
  public static Example Add(Example x, Example y)
  {
   return new Example(x.Value + y.Value);
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

那么为什么我只得到点后C#中的实例方法(见下文)

z = Example.Examples.One.
Run Code Online (Sandbox Code Playgroud)

并在VB.net

Dim z = Example.Examples.One.
Run Code Online (Sandbox Code Playgroud)

我也得到了 Examples

到底是怎么回事?为什么不同?

SLa*_*aks 6

出于兼容性原因,VB.Net允许您通过实例限定符访问Shared(static)方法.
不要这样做; 这令人困惑.

  • +1.但这不是出于兼容性原因.VB6根本不允许在类上使用共享(静态)方法.@Adam这里是[VB6参考指南](http://msdn.microsoft.com/en-us/library/aa338032(v = VS.60).aspx).VB6 IDE适用于Win7 64位.而VB6已有15年历史(1998年发布). (2认同)