3

共通言語仕様によると、配列パラメーターを持つメソッドのオーバーロード解決は、それらが配列であるという事実とその要素の型に基づいています。Double()()は配列の配列であり、asDouble()は double の配列であるため、次のコードは準拠している必要があります。

<CLSCompliant(True)> _
Public Class VBTest

  Public Sub ArrayTest(value As Double())
  End Sub

  Public Sub ArrayTest(value As Double()())
  End Sub

End Class

ただし、C# で同じコードを使用すると、2 番目の ArrayTest メソッドで警告が表示されます。

「名前のない配列型だけが異なるオーバーロードされたメソッド 'CSTest.ArrayTest(double[][])' は CLS に準拠していません」

[CLSCompliant(true)]
public class CSTest
  {
    public void ArrayTest(double[] value){}
    public void ArrayTest(double[][] value){}
  }

この CLS ルールを正しく理解している場合、C# は VB とは異なる方法でジャグ配列を扱いますか? それとも、これは C# コンパイラのバグですか? どちらの場合も、.NET Framework 4.0 を対象とする VS2010 を実行しています。

4

1 に答える 1