Почему массив работает как словарь?
Дело уж точно не в том где вы храните данные - массив, словарь, список, а в том что храните и как этим манипулируете.

Допустим имеете дело с классом
public class Point{
  public int X{ get; set;}
  public int Y{ get; set;}
}

var points = new Point[1];
var point = new Point();
points[0] = point; // points[0] и point указывают на один и тот же объект
points[0].X = 10; // point.X == 10
Потому, что класс это ссылочный (мутабельный - тоже имеет значение) тип данных

Другой пример:
public struct StructPoint{
  public int X{ get; set;}
  public int Y{ get; set;}
}
var point = new StructPoint();
points[0] = point; // points[0] и point имеют одинаковое значение! т.е. (points[0] == point) но ссылаются на разные области памяти
points[0].X = 10; // point.X == 0
Потому, что структура это значимый тип данных

Для строк, поведение будет примерно как для структур хотя они ссылочные. Потому что строки иммутабельные, когда меняется строка на самом деле создается новая.

https://metanit.com/sharp/tutorial/2.16.php
Значит ArrayClassTest[0] и ArrayClassTest[1] - это один и тот же объект.
Создавай два разных объекта через new и проблемы не будет.