要素数N個の配列の宣言と参照方法についての質問です。

質問1

 開始インデックスを0とするのがよいのか、1とするのが良いのか

質問2

 要素数Nの配列が必要なとき、宣言時にN-1を指定するのか、それとも別のやり方があるのか


VB.NET初心者です。
配列の範囲外アクセスの挙動を調べる勉強用のプログラムを書いていて、インデックスが0から10までの要素にアクセスしてみました。

インデックス0と10ではエラーとならず、11でエラーとなりました。
インデックス10でエラーとなることを想定していたのですが、エラーとなりませんでした。
要素数を調べてみると11でした。想定は10なのでこれも意外でした。

【ソースコード】

    Dim idx
    Dim a(10)
    idx = 0
    a(idx) = idx
    Console.WriteLine("a(" & idx & ")= " & a(idx))
    idx = 10
    a(idx) = idx
    Console.WriteLine("a(" & idx & ")= " & a(idx))
    idx = 11
    a(idx) = idx
    Console.WriteLine("a(" & idx & ")= " & a(idx))

【実行結果】

a(0)= 0
a(10)= 10
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at ConsoleApp1.Program.Main(String[] args) in 省略\Program.vb:line 63

10を指定して配列を宣言すると要素数が11個の配列ができます。

【ソースコード】

Dim a(10)
Console.WriteLine("a.length = [" & a.Length & "]")

【実行結果】

a.length = [11]