The read-only only applies to the array variable itself, but not for the members of the array. You cannot change the variable and make it point to another array, that's it.
The solution to prevent modifying members of the array is to hide the array itself from outside, and get rid of the setter in index-accessor property:
public class Polynomial
{
readonly private double[] coeff;
public double this[int i] { get => coeff[i]; }
public Polynomial(double c0, double c1, double c2)
{
coeff = new double[] { c0, c1, c2 };
}
}
This way, you cannot modify any element of the array, because from the outside there is absolutely no way to do it.